django踩坑记
2020-1-2
| 2023-4-13
0  |  0 分钟
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
如下图所示
notion image
在 settingpy 的 MIDDLEWARE 引入, webproject 与自己的项目名字对应,
'webproject.solveCrossDomain.SolveCrossDomainMiddleware',
如下图所示
notion image
即可解决跨域问题,因为 SolveCrossDomainMiddleware 中已经对 request 和 response 做了处理了

session 跨域问题

因为我使用的是 Vue.js + django 前后端分离,因此需要解决 session 跨域问题

Vue 里加入 (因为我使用的是 axios

this.$axios.defaults.withCredentials = true
如下图所示
notion image

以下为 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 不可以
如下图红线区所示
notion image
在 Vue.js 前端引入

migrate 无报错,迁移后数据库没有增加表

我是手动直接删除了 migrations 里面的文件和数据库里面的表格,,然后我改了 models.py 后 makemigrations && migrate 数据库竟然没有多出表。
notion image
原来 django 数据库里面,是有这个表格的
notion image
里面存放着关于数据库迁移的信息,所以我手动删除了迁移表和数据后并没有什么乱用,数据库以为它还是在的,,所以,我选择了删除所以表格,,重新 makemigrations && migrate 就好了。

因为这是个人作业,,所以随便删了,生产环境慎用。。。**

 
技术分享
  • Python
  • Django
  • 开发
  • 2020腾讯犀牛鸟网络安全T-Star高校挑战赛Writeup2019年第三届广东省强网杯网络安全大赛WEBwriteup
    目录