django如何设置Cookies和Session

在文件settings.py中:

根据控制台的提示DEBUG注解掉,然后ALLOWED_HOSTS配置允许一些IP访问服务器:

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True

ALLOWED_HOSTS = ['*']  # 允许访问的IP

再把跨域中间件注解掉(没Nginx想解决跨域问题需要在Spring中用了一个配置类,而这里只用一行):

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',
]

增加有关配置

# redis session
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
    
    
    'host': '127.0.0.1',
    'port': 6379,
    'db': 0,
    'prefix': 'session',
    'socket_timeout': 10
}  # 用Redis来保存Session,这样可以看到存储具体情况而且方便管理
SESSION_COOKIE_NAME = 'index'
SESSION_COOKIE_PATH = '/'  # Session的cookie保存的路径
SESSION_COOKIE_DOMAIN = None  # Cookies域名默认为无
SESSION_COOKIE_SECURE = False  # 不用Https传输Cookies,是默认值
SESSION_COOKIE_HTTPONLY = True  # 默认Session的cookie只支持http传输
SESSION_COOKIE_AGE = 60*60*24*7  # 登录状态保留7天,以秒为单位
SESSION_EXPIRE_AT_BROWSER_CLOSE = False  # 关闭浏览器使得Session不过期
SESSION_SAVE_EVERY_REQUEST = False  # 不是每次请求都要保存Session

然后写一个接口:

from django.shortcuts import HttpResponse
from django.http import HttpRequest, JsonResponse
from django.views.decorators.http import require_http_methods
import json
import time


@require_http_methods(['POST'])  # 允许POST请求
def foo(request: HttpRequest, *args, **kwargs):
    body = json.loads(request.body)  # 之后要用JSON格式的请求体
    if 'name' in body:
        request.session['name'] = body['name']  # 设置Session
    response = JsonResponse({
    
    'val': True})  # 就是返回JSON格式的数据
    response.set_cookie('time', '%d' % (time.time()*1000))  # 设置一条Cookie
    return response

并在url.py中配置之。

发送一个很普通的请求

import requests
import json


res = requests.post(
	url='http://localhost:8000/signIn/',  # 末尾的斜杠不要随便删
	data=json.dumps({
    
    'name': 'hello_ world'})
)
print(res.status_code, res.text, res.cookies)

得到结果:

200 {"val": true} <RequestsCookieJar[<Cookie index=nfuv8s9o1rzz5wpm48rehcqqmdfp1t1a for localhost.local/>, <Cookie time=1636303335746 for localhost.local/>]>

可以看到之前配置的名为index的Cookie。
请添加图片描述也可以看到之前设置的名为session的Session。

猜你喜欢

转载自blog.csdn.net/dscn15848078969/article/details/121200268
今日推荐