1. 登录页面展示
1.在users.views.py文件中定义视图
from django.views import Viewclass LoginView(View):def get(self,request):return render(request,'login.html')
2.在users.urls.py文件中定义路由
from users.views import LoginViewurlpatterns = [# 参数1:路由# 参数2:视图函数# 参数3:路由名,方便通过reverse来获取路由path('login/', LoginView.as_view(),name='login'),]
3.修改login.html中的资源加载方式
<!-- Header部分 -->{% load staticfiles %}<!-- 引入bootstrap的css文件 --><link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}"><!-- 引入vuejs --><script type="text/javascript" src="{% static 'js/vue-2.5.16.js' %}"></script><script type="text/javascript" src="{% static 'js/axios-0.18.0.min.js' %}"></script>...<!-- Footer部分 --><script type="text/javascript" src="{% static 'js/host.js' %}"></script><script type="text/javascript" src="{% static 'js/common.js' %}"></script><script type="text/javascript" src="{% static 'js/login.js' %}"></script>...<!-- 点击注册部分 --><small class="form-text text-muted ml-1">还没有账号?<a href="{% url 'users:register' %}" style="color: cornflowerblue; ">注册新账号</a>
2. 登录接口设计
1.请求方式
2.请求参数:表单
3.响应结果:HTML
3. 登录接口实现
from django.contrib.auth import loginfrom django.contrib.auth import authenticateclass LoginView(View):def post(self,request):# 接受参数mobile = request.POST.get('mobile')password = request.POST.get('password')remember = request.POST.get('remember')# 校验参数# 判断参数是否齐全if not all([mobile, password]):return HttpResponseBadRequest('缺少必传参数')# 判断手机号是否正确if not re.match(r'^1[3-9]\d{9}$', mobile):return HttpResponseBadRequest('请输入正确的手机号')# 判断密码是否是8-20个数字if not re.match(r'^[0-9A-Za-z]{8,20}$', password):return HttpResponseBadRequest('密码最少8位,最长20位')# 认证登录用户# 认证字段已经在User模型中的USERNAME_FIELD = 'mobile'修改user=authenticate(mobile=mobile, password=password)if user is None:return HttpResponseBadRequest('用户名或密码错误')# 实现状态保持login(request, user)# 响应登录结果response = redirect(reverse('home:index'))# 设置状态保持的周期if remember != 'on':# 没有记住用户:浏览器会话结束就过期request.session.set_expiry(0)# 设置cookieresponse.set_cookie('is_login', True)response.set_cookie('username', user.username, max_age=30 * 24 * 3600)else:# 记住用户:None表示两周后过期request.session.set_expiry(None)# 设置cookieresponse.set_cookie('is_login', True, max_age=14*24 * 3600)response.set_cookie('username', user.username, max_age=30 * 24 * 3600)#返回响应return response
注意:
默认的认证方法中是对username进行认证。我们需要修改认证的字段为mobile。所以我们需要在User的模型中修改
USERNAME_FIELD='mobile'才能实现手机号的认证
登录测试:
解决csrf验证:
关于是否记住密码:
*********************************************************************************************************
如果觉得《Django博客系统(登录)》对你有帮助,请点赞、收藏,并留下你的观点哦!