在文件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。