Django项目:注册登录页面

作者: oldboy 分类: Django 发布时间: 2023-12-15 23:00

目录


  • 一、创建项目
  • 二、优化settings
  • 三、创建管理注册登录的用户模型(默认使用自带的sqlite3数据库)
    • 创建模型
    • 迁移数据
    • 查看数据库
  • 四、创建模板、编辑视图、添加路由
    • 1、创建注册模板、视图、路由
      • 注册模板
      • 注册视图
      • 注册路由
      • 启动站点服务
      • 浏览器访问并注册
    • 2、创建登录模板、视图、路由
      • 登录模板
      • 登录视图
      • 登录路由
    • 3、创建首页模板、视图、路由
      • 首页模板
      • 首页视图
      • 首页路由
    • 4、实现注销功能
      • 不需要注销模板
      • 注销视图
      • 注销路由
  • 五、浏览器注册、登录、注销测试

一、创建项目

二、优化settings

三、创建管理注册登录的用户模型(默认使用自带的sqlite3数据库)

创建模型

代码:

class User(models.Model):
username=models.CharField(max_length=30,unique=True)
password=models.CharField(max_length=30)
telephone=models.CharField(max_length=11)

迁移数据

python manage.py makemigrations
python manage.py migrate

查看数据库

已经生成字段,暂时数据

四、创建模板、编辑视图、添加路由

1、创建注册模板、视图、路由

注册模板

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
    <h2>用户注册</h2>
    <hr>
    <form action="" method="post">
        {% csrf_token %}
        <p>用户名: <input type="text" name="username"></p>
        <p>密&nbsp;&nbsp;&nbsp;码: <input type="password" name="password"></p>
        <p>电&nbsp;&nbsp;&nbsp;话: <input type="text" name="telephone"></p>
        <p><button>注册</button></p>
    </form>
</body>
</html>

注册视图

代码:

from django.http import HttpResponse
from django.shortcuts import render, redirect

from App.models import *


def register(request):
    if request.method == 'GET':
        return render(request,'register.html')
    elif request.method == 'POST':
        username=request.POST.get('username')
        password=request.POST.get('password')
        telephone=request.POST.get('telephone')
        print(username,password,telephone)
        if not username:
            return HttpResponse('用户名必填')
        elif not password:
            return HttpResponse('密码必填')
        elif not telephone:
            return HttpResponse('电话必填')
        users=User.objects.filter(username=username)  #先判断用户是否已经存在
        if users.exists():
            return HttpResponse('用户已经存在')
        else:
            try:
                User.objects.create(username=username,password=password,telephone=telephone)
                return redirect('login')  #跳转到登录视图
            except Exception as e:
                return HttpResponse(f'注册用户出错了:{e}')

注册路由

使用的是根路由,没有做路由分发

启动站点服务

python manage.py runserver

浏览器访问并注册

此时注册成功也不会跳转到登录页面,还没创建!

2、创建登录模板、视图、路由

登录模板

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <style type="text/css">  {#a标签去下划线#}
        a {
            text-decoration: none;
        }
    </style>
</head>
<body>
    <h2>用户登录</h2>
    <hr>
    <form action="" method="post">
        {% csrf_token %}
        <p>用户名: <input type="text" name="username"></p>
        <p>密&nbsp;&nbsp;&nbsp;码: <input type="password" name="password"></p>
                                                            {#button标签里有a标签#}
        <p><button>登录</button>&nbsp;&nbsp;&nbsp;<button><a href="{% url 'register' %}">注册</a></button></p>
    </form>
</body>
</html>

登录视图

代码:

def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
username=request.POST.get('username')
password=request.POST.get('password')
users=User.objects.filter(username=username,password=password) #登录验证
if users.exists():
user=users.first()
request.session['userid']=user.id #设置session
request.session.set_expiry(7*24*3600)
return redirect('index') #跳转到首页
else:
return HttpResponse('用户名或密码不正确,请重新登录!')

登录路由

直接访问域名就会跳转到登录页面

3、创建首页模板、视图、路由

首页模板

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>炎黄首页</title>
    <style type="text/css">
        a {
            text-decoration: none;
        }
    </style>
</head>
<body>
    <a name="top"></a>
    <h2>查看设备及版本信息</h2>
    <hr>
    <pre>
        1、通过display version命令的回显,查看交换机的版本信息。
            Huawei Versatile Routing Platform Software
            VRP (R) software, Version 5.160 (S7700 V200R021C00)
            Copyright (C) 2000-2020 HUAWEI TECH CO., LTD
            Quidway S7703 Terabit Routing Switch uptime is 0 week, 0 day, 1 hour, 3 minutes
            BKP 0 version information:
            1. PCB      Version  : LE02BAKB VER.A
            2. Supporting PoE    : No
            3. Board    Type     : ES0B017712P0
            4. MPU Slot Quantity : 2
            5. LPU Slot Quantity : 3
        2、通过display device命令的回显,查看交换机的型号、是否是集群/堆叠系统、交换机上使用的业务板(仅框式交换机有业务板)有哪些类型等。
    </pre>
    <hr>
    <p>当前登录用户:{{ user.username }}</p>
    <p>客户端IP地址:{{ client_ip }}</p>
    <p><button><a href="{% url 'logout' %}">注销</a></button>&nbsp;&nbsp;&nbsp;<button><a href="#top">返回顶部</a></button></p>
</body>
</html>

注销功能还没实现

首页视图

代码:

def index(request):
    userid=request.session.get('userid',0)  #验证用户登录再返回页面,获取CKKOIES的userid,默认值为0
    client_ip=request.META.get('REMOTE_ADDR')
    users=User.objects.filter(id=userid)
    if users.exists():
        user=users.first()
        return render(request,'index.html',{'user':user,'client_ip':client_ip})
    else:
        return redirect('login')

效果是不登录无法访问首页

首页路由

4、实现注销功能

就是删除session值

不需要注销模板

注销视图

代码:

def logout(request):
    session_key=request.session.session_key
    request.session.delete(session_key)
    request.session.flush()      #要加这个功能刷新session
    return redirect('login')

存在的问题,按浏览器的后退键又回到登录的界面,只是不是真正的登录,刷新一下就看不到了

注销路由

五、浏览器注册、登录、注销测试

访问:http://127.0.0.1:8000是登录界面,点击注册

会跳转到登录界面,输入用户名和密码登录

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

标签云