前后端分离时候静态页面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;
        }
    }

 

你可能感兴趣的:(python,web)