前後端分離時候靜態頁面ngix部署項目

注:以下所有內容來自於實踐項目,都是自己的總結,希望能爲你所用!

 

親測可用:

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;
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章