注:以下所有内容来自于实践项目,都是自己的总结,希望能为你所用!
亲测可用:
https://segmentfault.com/a/1190000015378237?utm_source=tag-newest
解决跨域:
从django层面修改settings配置,自定义中间件,代码
middleware.py文件
class MyCors(MiddlewareMixin):
def process_response(self, request, response):
response["Access-Control-Allow-Origin"] = "*"
if request.method == "OPTIONS":
response["Access-Control-Allow-Headers"] = "Content-Type"
response["Access-Control-Allow-Methods"] = "DELETE, PUT, POST"
return response
settings.py文件
MIDDLEWARE = [
'目录.middleware.MyCors',
...
]
使用Nginx+uWSGI部署Django项目
https://www.cnblogs.com/zzqit/p/10103303.html
前后端分离项目无法共享登陆session解决方案(使用token判定)
1.使用token进行认证
https://blog.csdn.net/hefeng6500/article/details/86772493
2.使用jwt进行认证
原理很简单,前端传一个用户唯一凭证,比如username,后端经过token加密,返回给前端(之前研究这个踩过不少坑)
参考资料:http://www.mamicode.com/info-detail-2743993.html
settings.py配置
settings.py配置
INSTALLED_APPS = [
......,
'rest_framework',
'rest_framework.authtoken', # 设置token
]
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}
登陆代码demo
from rest_framework_jwt.settings import api_settings
@api_view(['GET'])
def test_login(request):
"""
# 登陆测试接口
{
@example:/user/test_login/
request:
return:用户信息json
}
"""
demo = 'demo11'
user = User.objects.create(wx_openid='demo', code=demo, wx_pic=demo, wx_name=demo, sex=1, p_id=0)
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user) # 默认7天过期,可以修改设置
token = jwt_encode_handler(payload)
return HttpResponse(
json.dumps({'status': 1, 'token': token}, ensure_ascii=False, cls=DateEncoder),
content_type="application/json,charset=utf-8")
跨域增加部分headers验证参数之后解决方案
https://www.cnblogs.com/scharfsinnig/archive/2017/04/27/6769737.html
异常:
django 跨越报错 ?: (corsheaders.E013) Origin '127.0.0.1:8080' in CORS_ORIGIN_WHITELIST is missing schem
https://blog.csdn.net/qq_40423339/article/details/100889120
django项目部署:
不再使用nohup python runserver的方式部署django
改用nginx
runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的
WSGI Server 运行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。
uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。注意 uwsgi 是一种通信协议,而 uWSGI 是实现 uwsgi 协议和 WSGI 协议的 Web 服务器。uWSGI 具有超快的性能、低内存占用和多 app 管理等优点,并且搭配着 Nginx
就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
部署方式参考菜鸟教程:
https://www.runoob.com/django/django-nginx-uwsgi.html
https://www.jianshu.com/p/f3fd1f831729
踩过不少坑,请参考我的配置,配置可用,之前把http写成socket了
项目路径建立m_uwsgi.ini
[uwsgi]
#项目目录
chdir = /code/media_manager
#指定项目的application
module = media_manager.wsgi:application
#使用nginx连接时, 监控地址,注,这里要写服务器内网地址
;socket=0.0.0.0:8000
#直接做web服务器时, 所监控地址
http = 0.0.0.0:8000
#进程个数
workers = 10
;pidfile=/opt/script/uwsgi.pid
#指定静态文件
;static-map = /static=/opt/OurBlog/static
;uid = root #用户
;gid = root #组
#启用主进程
master = true
#自动移除unix Socket和pid文件当服务停止的时候
vacuum = true
#启用线程
enable-threads = true
#序列化接受的内容,如果可能的话
thunder-lock = true
#设置自中断时间
harakiri = 30
#设置缓冲
;post-buffering = 65536
#设置日志目录
daemonize = /log/media_manager/m_uwsgi.log
wsgi-file = media_manager/wsgi.py
# 保存主进程pid文件
pidfile = uwsgi.pid
buffer-size = 65536
启动方式 uwsgi --ini /项目路径/m_uwsgi.ini &
nginx配置,nginx后面加server:
server {
listen 8000;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
index index.html index.htm;
client_max_body_size 35m;
}
}