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

本文介绍了Django中用户登录接口的设计,包括GET和POST请求方式,请求参数和响应结果。同时,详细展示了主路由和子路由的配置,以及用户名登录的后端逻辑,涉及参数校验、用户认证和状态保持。核心思想是通过认证确保用户合法性,并使用session进行状态保持。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、⽤户名登录接⼝设计

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'))

知识要点

登录的核⼼思想:认证和状态保持
通过⽤户的认证,确定该登录⽤户是芒果头条的注册⽤户。
通过状态保持缓存⽤户的唯⼀标识信息,⽤于后续是否登录的判断

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值