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" %}
这样再次刷新的时候,就跳转到这个界面: