第11次:用户注册(简要版)

1、定义模板

在templates文件夹下边新建register.html,代码如下:

html 复制代码
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>

<!--{%是模板标签,
其作用是解析视图函数对应的URL模式。
auth_app对应的是此应用的urls.py中的app_name的值,即应用的命名空间
register对应的是urls.py是某个url模式的别名-->
<form action="{% url 'auth_app:register' %}" method="POST">
    {% csrf_token %}
    <div style="margin:0 auto;width: 500px">
        <table>
            <tr style="text-align: left">
                <td><label>用户名</label></td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr style="text-align: left">
                <td><label>密码</label></td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr style="text-align: left">
                <td><label>确认密码</label></td>
                <td><input type="password" name="check_password"></td>
            </tr>
        </table>
        <div style="margin:0 auto;width: 300px">
            <!--{% 为模板标签,一般用于文本输出或流程控制-->
            {% if state %}
            <!-- {{是模板变量,其值由视图函数传递过来-->
            <p style="color: red">{{ state }}</p>
            {% endif %}
        </div>
        <button type="submit">注册</button>
    </div>
</form>
</body>
</html>

2、定义对应的视图类

在auth_app/views.py文件中定义处理用户注册请求的视图类RegisterView(),分别处理浏览器发起的GET请求和POST请求。

  1. auth_app/views.py完整代码如下:
python 复制代码
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.urls import reverse
from django.views import View
from django.contrib.auth import authenticate, login, logout

# 注册
class RegisterView(View):
    """此视图类用于响应http://127.0.0.1:8000/register的GET与POST请求"""

    def get(self, request):
        """处理GET请求"""
        state = request.GET.get('state', '')
        print('GET请求  state=', state)
        return render(request, 'register.html', {'state': state})

    def post(self, request):
        """处理POST请求"""
        # 1、接收请求参数,用户名、密码和确认密码
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        check_password = request.POST.get('check_password', '')
        # 2、校验请求参数
        # 判断两次密码是否一致
        if password != check_password:
            state = '两次密码输入不一致,请重新输入!'
            return render(request, 'register.html', {'state': state})

        username_exists = User.objects.filter(username=username).exists()
        # 判断用户名是否已被注册
        if username_exists:
            state = '该用户名已被注册,请登录!'
        else:
            # 执行注册
            user = User.objects.create_user(username=username, password=password)
            # 3、保存注册数据
            user.save()
            state = '注册成功,请登录!'
        # 4、返回注册结果,在第10次课有登录页面时使用
        # return redirect(reverse('auth_app:login') + '?state={}'.format(state))
        # 注册时的重定向,第9次课使用
        return redirect(reverse('auth_app:register') + '?state={}'.format(state))
  1. 处理get请求。当后端接收到用户通过浏览器发起的get请求后,调用RegisterView()里的get()方法处理GET请求,并返回register.html页面。
  2. 注册数据通过前端校验之后,用户单击注册按钮,浏览器会向后端发送POST请求,Django接收注册页面发来的POST请求,调用RegisterView类中的post()方法处理该请求。post()方法对POST请求的处理可以分为4步:接受请求参数,校验请求参数、保存注册数据、返回注册结果。

3、配置路由

根路由urls.py中:

python 复制代码
path('', include('auth_app.urls'))

子路由baicai/auth_app/urls.py中:

python 复制代码
from django.urls import path
from . import views
app_name ='auth_app'
urlpatterns = [
    path('register/', views.RegisterView.as_view(), name='register'),
]

python manage.py runserver运行项目

浏览器访问http://127.0.0.1:8000/register,输入用户名,密码以及确认密码,点击注册可进行注册。

刷新navicat里的goods数据库auth_user表,可以看到新创建的用户。

相关推荐
AC赳赳老秦2 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
huangdong_2 小时前
电商图片下载工具横向对比深度评测:固乔、FATKUN、图快、当图、淘蛙、存图宝七款工具全面解析
python
满怀冰雪2 小时前
04-Paddle Tensor 基础:形状、数据类型、广播与索引
python·深度学习·神经网络·paddle
cui_ruicheng2 小时前
Python从入门到实战(十五):文件操作与目录管理
开发语言·python
xcLeigh3 小时前
Doubao-Seed-Evolving大模型接入教程|搭建全品类提示词+AI工具导航网页
前端·人工智能·python·ai·html·ai开发·豆包
不如语冰3 小时前
AI大模型入门-模块导入import
数据结构·人工智能·pytorch·python
投票竞赛3 小时前
书法、绘画作品投票评选,图片投票小程序作品集排版
python·小程序
梦远青城3 小时前
Docker 部署python的paddle进行OCR文字识别身份证
python·docker·ocr·paddle·身份证识别
编码者卢布4 小时前
【Azure APIM】APIM的诊断日志与Application Insights的日志是否可以串联为一个端到端的日志链路呢?
python·flask·azure
FriendshipT4 小时前
Ultralytics:解读CBLinear模块
人工智能·pytorch·python·深度学习·目标检测