抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

python 虚拟环境

pip install virtualenv
pip install virtualenvwrapper-win # windows 使用此命令

好处,:可以一个环境对应一个项目

闭包

一直好奇闭包有什么用,直到学了 django 后的登录装饰器

闭包的应用:装饰器、面向对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"""
装饰器的应用
如果需要统计一个函数运行的时间,加上装饰器即可,可简化代码
"""

import time


def func_timer(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 文件。写入如下代码

1
2
3
4
5
6
7
8
9
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

如下图所示

django1.png

在 settingpy 的 MIDDLEWARE 引入, webproject 与自己的项目名字对应,

1
'webproject.solveCrossDomain.SolveCrossDomainMiddleware',

如下图所示

django2.png

即可解决跨域问题,因为 SolveCrossDomainMiddleware 中已经对 request 和 response 做了处理了

session 跨域问题

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

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

1
this.$axios.defaults.withCredentials = true

如下图所示

django6.png

以下为 django 里的操作

我使用的是 数据库存储 session, 因此 setting.py 引入的是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 不可以

如下图红线区所示

django3.png

在 Vue.js 前端引入

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

我是手动直接删除了 migrations 里面的文件和数据库里面的表格,,然后我改了 models.py 后 makemigrations && migrate 数据库竟然没有多出表。

django4.png

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

django5.png

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

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

评论