DJANGO-学习笔记4.2 用户注册实现

用户注册是一个基础功能。接下来讲如何实现。

1. 在 app 中创建两个新的网页分别用来注册和当作主页。
    path('signUp', views.signUp, name='注册页面'),
    path('index', views.index, name="主页")

使用 name 属性方便 navigate 操作。

在 views 和 templates 中创建对应函数和html文件。


2.简单地在 index.html 和 signUp.html 中实现功能代码

index.html:

<h1>Welcome to index</h1>

signUp.html:

<h1>测试注册</h1>
<br>

<form method="POST" action="{% url '注册页面' %}" align="enter">
    {% csrf_token %}
    <br>用户名
    <br>
    <input type="text" name="用户名">
    {{warn}}
    <br>
    <br>密码
    <br>
    <input type="password" name="密码">
    <br>
    <br>确认密码
    <br>
    <input type="password" name="确认密码">
    <br>
    <input type="submit" value="提交">

</form>
特殊字段:
 
 
{% csrf_token %}
这个会起到保护作用。具体原理不明,但必须加上否则会报错。

完成了将表单提交到本页面处理。

3.逻辑层撰写

首先倒入 redirect 单向去页面(具体可以看我小程序那一章的笔记)

from django.shortcuts import render, redirect

index:

def index(request):
    return render(request,'主页')

signUp:

由于 django 自带 User 模块,所以首先导入 User 模块

from django.contrib.auth.models import User

由于 signUp 页面要同时处理 POST 和 GET 请求,所以要使用 if 分开

if request.method == 'GET':
   return render(request, 'signUp.html')
elif request.mothod == 'POST':

通过 name 获取到 表单中的值

user_name = request.POST['用户名']
password = request.POST['密码']
password_c = request.POST['确认密码']

进行逻辑判断,全部代码如下:

def signUp(request):
    if request.method == 'GET':
       return render(request, 'signUp.html')
    elif request.method == 'POST':
        user_name = request.POST['用户名']
        password = request.POST['密码']
        password_c = request.POST['确认密码']
        try:
            User.objects.get(username = user_name)
            return render(request, 'signUp.html', {'warn':'用户名已经被注册'})
        except: 
            # User.DoesNotExist
            if password == password_c:
                User.objects.create(username=user_name, password = password)
                return redirect('主页')
            else:
                return render(request, 'index.html', {'warn':'两次密码不一致'})
 
 

User.object.get 会获取用户,如果获取不了会报错 User.DoesNotExist

为了让效果更明显,在 signUp.html 中加入提示

    {{warn}}
4.数据库迁移(不一定要,但是是个好习惯)
5.测试效果

猜你喜欢

转载自blog.csdn.net/weixin_42271658/article/details/80447100
今日推荐