Python进阶5:Django4-用户登录和注销的业务逻辑

1. 路由与视图函数框架搭建

URL 视图views 模板 功能
/index/ login.views.index index.html 首页
/login/ login.views.login login.html 登录页面
/register/ login.views.register register.html 注册界面
/logout/ login.views.logout 无需返回页面 登出界面

访问策略:

  • 未登录人员,不论是访问index还是login和logout,全部跳转到login界面
  • 已登录人员,访问login会自动跳转到index页面
  • 已登录人员,不允许直接访问register页面,需先logout
  • 登出后,自动跳转到login界面

1.1 路由配置

  • 主路由配置文件:
# loginRegister/urls.py 

from django.contrib import admin
from django.urls import path, include 

urlpatterns = [ 
	path('admin/', admin.site.urls), 
	path('', include('login.urls')) # 添加的行, 如果没有前缀,访问子路由配置文件 
]
  • 子路由配置文件(login子应用的)
# login/urls.py(新建的文件) 
from django.urls import path, include 
from login import views 

urlpatterns = [ 
	path('index/', views.index, name='index'), 
	path('login/', views.login, name='login'), 
	path('register/', views.register, name='register'), 
	path('logout/', views.logout, name='logout'), 
]

1.2 视图函数的配置

from django.shortcuts import render

# Create your views here.

from datetime import datetime, timedelta

from django.core.mail import send_mail
from django.shortcuts import render, redirect

# Create your views here.
from login.forms import LoginForm, RegisterForm
from login.models import SiteUser, ConfirmString
from login.utils import hash_code, make_confirm_string, send_email
from loginRegister import settings


def index(request):
    if request.session.get('is_login'):
        return render(request, 'login/index.html')
    return  redirect('/login/')

def login(request):
    if request.method == 'POST':
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            username = login_form.cleaned_data.get('username')
            password = login_form.cleaned_data.get('password')
            user = SiteUser.objects.filter(name=username, password=hash_code(password)).first()
            if user:
                if not user.has_confirmed:
                    message = '该用户还未经过邮件确认!'
                    return render(request, 'login/login.html', locals())
                request.session['is_login'] = True
                request.session['user_id'] = user.id
                request.session['username'] = user.name
                return redirect('/index/')
            else:
                message = "用户名或者密码错误"
                return render(request, 'login/login.html', locals())
        else:
            message = "填写的登录信息不合法"
            return render(request, 'login/login.html', locals())
    login_form = LoginForm()
    return render(request, 'login/login.html', locals())

def register(request):
    # 如果用户已经登录,则不能注册跳转到首页。
    if request.session.get('is_login', None):
        return redirect('/index/')
    # 如果是POST请求
    if request.method == 'POST':
        print(request.POST)
        register_form = RegisterForm(request.POST)
        message = "请检查填写的内容!"
        # 先验证提交的数据是否通过
        if register_form.is_valid():
            # 清洗数据
            username = register_form.cleaned_data.get('username')
            password1 = register_form.cleaned_data.get('password1')
            password2 = register_form.cleaned_data.get('password2')
            email = register_form.cleaned_data.get('email')

            # 接下来判断用户名和邮箱是否已经被注册
            same_name_user = SiteUser.objects.filter(name=username)
            print(same_name_user)
            if same_name_user:
                message = '用户名已经存在'
                return render(request, 'login/register.html', locals())
            same_email_user = SiteUser.objects.filter(email=email)
            if same_email_user:
                message = '该邮箱已经被注册了!'
                return render(request, '
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值