Django(十一)

django操作cookie和session

session的默认过期时间是14天

'''在负载均衡中,如果使用session保存用户信息,会出现session共享问题?'''
那么, 如何解决上述问题?

常用的缓存数据库就是redis

'''
1. 缓存雪崩
2. 缓存穿透
3. 缓存击穿
'''
'''在settings.py中配置'''

SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)

CBV添加装饰器

from django.views import View
from django.utils.decorators import method_decorator

@method_decorator(login_auth, 'get') # 第二种方式添加
@method_decorator(login_auth, 'post')
class IndexView(View):
@method_decorator(login_auth) # 第三张方式给所有的方法添加装饰器
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)

@method_decorator(login_auth) # 第一种方式添加装饰器

def get(self, request):
return HttpResponse('get')

def post(self, request):
return HttpResponse('post')

中间件

django给我们提供了7个中间件,在配置文件中查询
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

还支持我们自定义中间件

'''
中间件用来干嘛:
1. 校验权限
2. 限制访问频率
3. 检查认证
...
'''

步骤:
1. 在任何一个应用下面,创建一个py文件
2. 在py文件中写一个类必须要继承MiddlewareMixin
3. 中间写完之后,一定要到配置文件中注册中间件

需要我们掌握的
'''
1. process_request
请求来的时候会走
2. process_response
请求走的时候会走
'''
from django.shortcuts import render, HttpResponse
from django.utils.deprecation import MiddlewareMixin

class Mydd1(MiddlewareMixin):
def process_request(self, request):
print('第一个process_request')
return HttpResponse('第一个process_request')

def process_response(self, request, response):
print('第一个process_response')
return response # 必须要返回一个response对象

class Mydd2(MiddlewareMixin):
def process_request(self, request):
print('第二个process_request')

def process_response(self, request, response):
print('第二个process_response')
return response # 必须要返回一个response对象

csrf跨站请求

背景:

钓鱼网站
'''
英语4级报名网站为例
你要在这个网站要付费,你去的这个网站是一个冒牌的网站,他就去冒牌网站里面付费了,前付到了冒牌网站,没有报名成功。

'''
他会出现在form表单中,action参数:朝后端发送的地址

怎么解决这个问题?

csrf是针对与post请求的才会做验证

'''token相关的,一般都是一个串,秘钥, 私钥,公钥'''

两种解决方式

{#data:{'a':1, 'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()},#}
data:{'a':1, 'csrfmiddlewaretoken': '{{ csrf_token }}'},

csrf相关装饰器

'''
如果使用中间件限制的话,他就会限制全局的,要么全部限制,要么全部不限制

只有index函数需要验证,其他的不需要验证
我只想让home函数不验证,其他的都需要验证
'''
提供了2个装饰器
csrf_protect: 需要验证
csrf_exempt:不需要验证

'''
按照FBV和CBV的使用即可
'''

from django.views.decorators.csrf import csrf_exempt,csrf_protect
'''
针对CBV:
csrf_protect的三种方式都是可以的
csrf_exempt前两种方式都不行,只有第三种方式可以的
'''

Auth模块

迁移数据库会有一个表生成,auth_user

django项目创建完后之后,会有一个默认的路由,admin/

admin/是django默认提供的后台管理界面

访问admin/登录参照的数据就是从auth_user表中来,前提是必须是超级管理员

如何创建超级管理员?

python3 manage.py createsuperuser

posted @ 2022-04-03 13:36  丶祈安  阅读(88)  评论(0)    收藏  举报