第11次:用户注册(简要版)
1、定义模板
在templates文件夹下边新建register.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请求。
auth_app/views.py
完整代码如下:
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))
- 处理get请求。当后端接收到用户通过浏览器发起的get请求后,调用RegisterView()里的get()方法处理GET请求,并返回register.html页面。
- 注册数据通过前端校验之后,用户单击注册按钮,浏览器会向后端发送POST请求,Django接收注册页面发来的POST请求,调用RegisterView类中的post()方法处理该请求。post()方法对POST请求的处理可以分为4步:接受请求参数,校验请求参数、保存注册数据、返回注册结果。
3、配置路由
根路由urls.py中:
path('', include('auth_app.urls'))
子路由baicai/auth_app/urls.py中:
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表,可以看到新创建的用户。