Django开发实战之登录用户鉴权登录界面实现

发布于:2024-05-07 ⋅ 阅读:(29) ⋅ 点赞:(0)

Django自带的鉴权系统非常的安全,大家可以放心使用,那么如何使用呢?

1、首先需要检查settings文件种的INSTALLED_APPS,有没有这两部分内容:

2、检查中间件,比如这两个中间件,一个是用于登录,一个是用于鉴权

'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',

 接下来如何进行使用呢,

首选我们需要做到禁止匿名访问,也就是必须登录才能访问,示例代码如下:

def submit(request):
    request.user:AbstractBaseUser
        if not request.user.is_authenticated: #如果已登录,返回ture,否则返回false
        return HttpResponse("请先登录",status = 403)

    if request.method == 'GET':
        html = open("submit.html", encoding="utf-8").read()
        return HttpResponse(html)
    elif request.method == 'POST':
        # 获取提交的表单数据
        data = json.loads(request.body)
        my_sql()
        print("请求数据",data)
        # obj:Feedback = Feedback.objects.filter(id=4).delete()
        obj_list: list[Feedback] = Feedback.objects.filter(id=5).filter(anonymous=True)  # 获取id等于2,并且是匿名的数据
        print(f"sql={obj_list.query}") #显示sql语句
        for obj in obj_list:
            print(f"obj={obj}")

        return JsonResponse({'status': 'success'})

 

 但是这种方式有个弊端,如果我需要每个视图函数访问之前都需要登录,那么我就需要在每个视频函数里面都添加上面的代码,这样会很不方便,接下来引入第二种方式:装饰器

import json
import os

from django.contrib.auth import login, logout
from django.contrib.auth.base_user import AbstractBaseUser
from django.shortcuts import render
from django.http import JsonResponse, HttpResponse, HttpResponseRedirect, HttpResponsePermanentRedirect
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
from django.template.loader import render_to_string
from django.urls import reverse
from django.contrib.auth.decorators import login_required

from django.db import connection

from lili.models import Feedback


@login_required
def submit(request):
    # request.user:AbstractBaseUser
    # if not request.user.is_authenticated: #如果已登录,返回ture,否则返回false
    #     return HttpResponse("请先登录",status = 403)

    if request.method == 'GET':
        html = open("submit.html", encoding="utf-8").read()
        return HttpResponse(html)
    elif request.method == 'POST':
        # 获取提交的表单数据
        data = json.loads(request.body)
        my_sql()
        print("请求数据",data)
        # obj:Feedback = Feedback.objects.filter(id=4).delete()
        obj_list: list[Feedback] = Feedback.objects.filter(id=5).filter(anonymous=True)  # 获取id等于2,并且是匿名的数据
        print(f"sql={obj_list.query}") #显示sql语句
        for obj in obj_list:
            print(f"obj={obj}")

        return JsonResponse({'status': 'success'})

 如果是匿名用户访问视图时,可以重定向到登录页面

接下来教大家如何实现一个登录页面:
1、首先在全局urls那里配置django的路由,也就是根据urls来创建路由

 path('accounts/', include('django.contrib.auth.urls'))

 2、创建一个模板,不然会报错,提示找不到模板templates,

在app路径下面新增一个templates,再新增registration

然后在registration下面创建一个html文件,这些都是根据上面那个报错来的

 再次刷新,还是报错:

这个时候检查配置文件里面模板相关的内容:

但是再次刷新,发现还是打不开,是因为这个时候需要手动重启下项目,因为配置文件不会被自动加载

这样就可以拉,这里之所以是空白,是因为创建的这个页面本身就是空白的

这样再次去访问之前提交评论的页面,就会自动跳到登录页面

login.html一般需要根据自己公司的情况自己写,如果不想写,也可以继承django的登录页面,只需要在login.html页面中写入这样的内容,原有的内容删掉

{% extends "admin/login.html" %}

这样再次刷新的时候,就跳转到这个界面: