一、⽤户名登录接⼝设计
2、请求参数:表单参数
二、定义路由
主路由
from django.contrib import admin
from django.urls import path,re_path,include
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^',include('userapp.urls')),
re_path('^',include(('newsapp.urls','newsapp'),namespace='newsapp')),
re_path('^',include(('verifications.urls','verifications'),namespace='verifications'))
]
子路由:
from django.urls import path,re_path
from . import views
from django.contrib.auth.decorators import login_required
urlpatterns=[
re_path('^register/$',views.RegisterView.as_view()),
re_path('^usernames/(?P<username>[a-zA-Z_]{5,8})/count/$',views.UsernameCount.as_view()),
re_path('^logout/$',views.LogoutView.as_view()),
re_path('^phones/(?P<phone>1[3589][0-9]{9})/count/$',views.PhoneCountView.as_view()),
re_path('^login/$',views.LoginView.as_view()),
]
三、⽤户名登录后端逻辑
import re
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from django.views.generic.base import View
from mgproject. utils.exceptions import Forbbiden
from . models import Users
from django.db import DatabaseError
from django.contrib.auth import login,logout,authenticate
from django.shortcuts import redirect
from django.urls import reverse
from django import http
# Create your views here.
class UserCenterView(View):
def get(self,request):
'''
显示用户中心页面
:param request:
:return:
'''
return render(request, 'userapp/user_center.html')
#判断当前访客是否登录
# if request.user.is_authenticated:
# return render(request,'userapp/user_center.html')
# else:
# return redirect(reverse('newsapp:index'))
class LoginView(View):
'''用户登录视图'''
def get(self,request):
'''
显示登录首页
:param request:
:return:
'''
return render(request,'userapp/login.html')
def post(self,request):
'''
处理登录请求
:param request:
:return:
'''
#1、接收参数
username=request.POST.get('username','')
password=request.POST.get('password','')
remember=request.POST.get('remember','')
#2、校验参数(非空校验、格式校验)
if not all([username,password,remember]):
return http.HttpResponseForbidden('缺少必传参数')
# 判断用户名是否是5-8个字符
if not re.match(r'^[a-zA-Z][a-zA-Z0-9_]{4,7}$', username):
return http.HttpResponseForbidden('请输⼊5-8个字符的⽤户名')
# 判断密码是否是3-8个字符
if not re.match(r'^[0-9a-zA-Z]{3,8}$', password):
return http.HttpResponseForbidden('请输⼊3-8位的密码')
#3、认证登录用户是否正确,django给我们自带了认证
user=authenticate(username=username,password=password)
if user is None:
return render(request,'userapp/login.html',{'login_error':'用户名或者密码错误'})
#4、状态保存
login(request,user)
if remember !='on':
#关闭浏览器失效
request.session.set_expiry(0)
else:
#None标识默认14天有限期
request.session.set_expiry(None)
#5、响应结果
return redirect(reverse('newsapp:index'))
知识要点
登录的核⼼思想:认证和状态保持
通过⽤户的认证,确定该登录⽤户是芒果头条的注册⽤户。
通过状态保持缓存⽤户的唯⼀标识信息,⽤于后续是否登录的判断
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74085.html