【django】用户登录之用户名登录【19】

导读:本篇文章讲解 【django】用户登录之用户名登录【19】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在这里插入图片描述

一、⽤户名登录接⼝设计

1、请求⽅式
在这里插入图片描述

2、请求参数:表单参数

在这里插入图片描述
3、响应结果:HTML
在这里插入图片描述

二、定义路由

主路由

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!