用户注册是一个基础功能。接下来讲如何实现。
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}}