注:以下所有內容來自於實踐項目,都是自己的總結,希望能爲你所用!
親測可用:
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;
}
}