python web开发之用户名登录后端逻辑

本文详细介绍了在 Django 框架下如何设计和实现一个用户名登录功能,包括登录逻辑分析、接口定义、后端登录逻辑的编写。在登录过程中涉及到参数校验、用户认证以及状态保持,最后通过重定向到首页来完成登录操作。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/weixin_45912307/article/details/110359261

1. 用户名登录逻辑分析

在这里插入图片描述

2. 用户名登录接口设计

1.请求方式

在这里插入图片描述

2.请求参数:表单

在这里插入图片描述

3.响应结果:HTML

在这里插入图片描述

3. 用户名登录接口定义

class LoginView(View):
    """用户名登录"""

    def get(self, request):
        """
        提供登录界面
        :param request: 请求对象
        :return: 登录界面
        """
        pass

    def post(self, request):
        """
        实现登录逻辑
        :param request: 请求对象
        :return: 登录结果
        """
        pass

4. 用户名登录后端逻辑

#  -- encoding: utf-8 --
# @time:    2020/11/29 20:47
# @Author: jsonLiu
# @Email: xxxxxxxx@qq.com
# @file: views.py

from django import http
from django.contrib.auth import authenticate, login
import re
from django.shortcuts import render, redirect
import http
from django.urls import reverse
from django.views import View


class LoginView(View):
   """用户登录"""
   def get(self,request):
       """提供用户登录页面"""
       return render(request,'login.html')
   def post(self,request):
       """实现用户登录逻辑"""
       # 接收参数
       username = request.POST.get('username')
       password = request.POST.get('password')
       remembered = request.POST.get('remembered')

       # 校验参数
       if not all([username,password]):
           return http.HttpResponseForbidden('缺少必传参数')
           # 判断用户名是否是6-20个字符
       if not re.match(r'^[a-zA-Z0-9_-]{6,20}$', username):
           return http.HttpResponseForbidden('请输入正确的用户名或手机号')
       # 判断密码是否是6-20个数字
       if not re.match(r'^[0-9A-Za-z]{6,20}$', password):
           return http.HttpResponseForbidden('密码最少6位,最长20位')
       # 认证登录用户,使用账号厂用户是否存在,如果用户存在,再检验密码是否正确
       user = authenticate(username=username, password=password)
       if user is None:
           return render(request, 'login.html', {'account_errmsg': '用户名或密码错误'})

       # 实现状态保持
       login(request, user)
       # 使用remembered确定状态保持周期(实现记住登录)
       if remembered != 'on':
           # 没有记住用户:状态保持在浏览器会话结束后就销毁
           request.session.set_expiry(0) # 单位是秒
       else:
           # 记住用户:状态保持周期为两周:默认是两周
           request.session.set_expiry(None)

       # 响应结果:重定向至首页
       return redirect(reverse('contents:index'))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值