type
Post
status
Published
date
Jan 2, 2020
slug
2020/django-summury
summary
跨域问题解决
tags
Python
Django
开发
category
技术分享
icon
password
python 虚拟环境
pip install virtualenv
pip install virtualenvwrapper-win # windows 使用此命令
好处,:可以一个环境对应一个项目
闭包
一直好奇闭包有什么用,直到学了 django 后的登录装饰器
闭包的应用:装饰器、面向对象
""" 装饰器的应用 如果需要统计一个函数运行的时间,加上装饰器即可,可简化代码 """ import time def func_ti mer(func): def wrapper(): start_time = time.time() func() print(time.time() - start_time) return wrapper @func_timer def login(): print('login success!') login()
跨域问题
在与 setting.py 同级目录新建一个 py 文件。写入如下代码
from django.utils.deprecation import MiddlewareMixin class SolveCrossDomainMiddleware(MiddlewareMixin): def process_response(self, request, response): response["Access-Control-Allow-Credentials"] = "true" response["Access-Control-Allow-Origin"] = "http://192.168.123.60:8080" response["Access-Control-Allow-Methods"] = ["GET", "POST"] return response
如下图所示

在 settingpy 的 MIDDLEWARE 引入, webproject 与自己的项目名字对应,
'webproject.solveCrossDomain.SolveCrossDomainMiddleware',
如下图所示

即可解决跨域问题,因为 SolveCrossDomainMiddleware 中已经对 request 和 response 做了处理了
session 跨域问题
因为我使用的是 Vue.js + django 前后端分离,因此需要解决 session 跨域问题
Vue 里加入 (因为我使用的是 axios
this.$axios.defaults.withCredentials = true
如下图所示

以下为 django 里的操作
我使用的是 数据库存储 session, 因此 setting.py 引入的是
MIDDLEWARE = [ ... 'django.contrib.sessions.middleware.SessionMiddleware', ... ] SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) 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 = 3600 # Session的cookie失效日期(默认2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认) SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认) # !!! 这个一定要加..... SESSION_COOKIE_SAMESITE = None # 默认为 Lax, 即 get 可跨域, 而 post 不可以
如下图红线区所示

在 Vue.js 前端引入
migrate 无报错,迁移后数据库没有增加表
我是手动直接删除了 migrations 里面的文件和数据库里面的表格,,然后我改了 models.py 后 makemigrations && migrate 数据库竟然没有多出表。

原来 django 数据库里面,是有这个表格的

里面存放着关于数据库迁移的信息,所以我手动删除了迁移表和数据后并没有什么乱用,数据库以为它还是在的,,所以,我选择了删除所以表格,,重新 makemigrations && migrate 就好了。