目录
1 代码编写顺序
针对每一个功能写代码的循环顺序:配置url(urls.py)→ 编写apps/user中的view类(apps/user/views.py)→(如果需要)编写新建的py文件 → 修改前端页面
2 urls.py文件
# urls.py
from django.urls import path, re_path, include
from django.views.generic import TemplateView
from apps.users.views import LoginView,LoginoutView # 自己创建的类
# TemplateView 可以省略view层,直接在url层返回页面
# 官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/class-based-views/base/#django.views.generic.base.TemplateView
# TemplateView.as_view(template_name="要渲染的模板文件"
# 可以使用get_context_data() 函数传一些额外内容到模板
# 参考文档:https://blog.csdn.net/mikezhou002/article/details/81293293
# context
# 可以利用context传递数据给Template对象。一个context是一系列变量和它们值的集合
# 参考文档:https://www.cnblogs.com/haiyan123/p/9771628.html
# https://docs.djangoproject.com/en/2.2/ref/urls/
urlpatterns = [
# path路径为空代表访问域名(http://127.0.0.1:8000)时展示的页面
# path('login/',TemplateView.as_view(template_name="login.html"),name="login"),
path('',LoginView.as_view(),name="login"),
# index.html 是登录之后跳转的页面
# 结尾一定要加/,这样既可以匹配index/,也可以匹配index。如果不加,则只能匹配index
path('index/',TemplateView.as_view(template_name="index.html"),name="index"),
# 登出url
path('logout/',LoginoutView.as_view(),name="logout"),
# 验证码相关
re_path('^captcha/', include('captcha.urls')),
# 验证码官方文档:https://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation
]
3 views.py文件
# apps/user/views.py
from django.shortcuts import render
from django.views.generic.base import View
from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect
from django.urls import reverse
from apps.users.forms import LoginForm, DynamicLoginForm # 自己创建的类
# Django提供的Form表单可以自动判断各种逻辑,例如:是否为空,长度是否符合, 输入是否正确 等等功能
# https://docs.djangoproject.com/zh-hans/2.2/ref/forms/api/
# 登录
class LoginView(View):
# 定义view类中的get请求
def get(self, request, *args, **kwargs):
# is_authenticated 在Django中用来判断是否是登录状态
# 如果是登录状态,则跳转到index页
if request.user.is_authenticated:
# HttpResponseRedirect 重定向
# reverse 根据urls.py中配置的路径名称(urlpatterns path中的name),找到相应的url
return HttpResponseRedirect(reverse("index"))
# 如果不是登录状态,则返回登录页面,同时显示图片验证码
dynamic_form = DynamicLoginForm()
# 将动态验证码传递到前端页面
return render(request,"login.html",{"login_form": dynamic_form})
# 定义view类中的post请求
def post(self,request,*args, **kwargs):
# request.POST 用来接收从前端表单中传过来的数据
login_