讲一讲Django开发中遇到的坑

作者: ioiogoo | 来源:发表于2016-11-30 20:29 被阅读2870次

    记录下用Django从开发环境到生产环境过程中遇到的问题和坑,分享给大家,也好做个备忘。查看原文

    Django

    Django是Python的web框架中用户最多、交流最多和文档最为齐全(以英文文档为主)的一个框架,让我忍不住去学习,于是撸了一个短链接平台。

    在线demo:https://www.0ooo0.cn
    Github地址:https://github.com/ioiogoo/SmartUrl

    以下按照实际开发中的顺序介绍:

    开发环境

    创建一个Django项目django-admin startproject mysite,这个没问题,但是需要注意的是后面还会创建项目的app,分清楚项目和app的区别,一个项目中可以包含很多app。

    然后创建一个apppython manage.py startapp app,创建好后,在app目录下创建templatesstatic文件夹,放置模板文件和静态文件,之后需要修改setting中的INSTALLED_APPS,TEMPLATES,STATIC_URL项目,根据需要修改DATABASES参数。如果需要显示中国时间的话,还需要修改时间参数,如下:

    # some default setting
    INSTALLED_APPS = [.......,
          'your app name'
          ]
    TEMPLATES = [......,
          'DIRS': [os.path.join(BASE_DIR, '/appname/templates/')],
        .......
        ]
    STATIC_URL = '/static/'
    TIME_ZONE = 'Asia/Shanghai'
    USE_TZ = False
    

    配置文件修改好之后,urls.py写路由规则,views.py写逻辑代码,models.py中定义数据模型,接下来就是按照写好的数据模型创建数据库。
    python manage.py makemigrations app 创建app的迁移文件
    python manage.py sqlmigrate app 0001 查看迁移文件的sql命令
    python manage.py migrate 执行迁移命令

    templates目录下放入模板文件,如果需要引用静态文件,如下:

    {% load static %}
    <link rel="stylesheet" type="text/css" href="{% static '/index.css' %}">
    

    模板文件如果需要用到render命令传入的Context,不能放在单引号内,只能用在双引号里面。

    <a class='btn btn-primary btn-copy' data-clipboard-text='{{param}}'>复制</a> # 这个是渲染不出来的,必须要双引号才行
    <a class='btn btn-primary btn-copy' data-clipboard-text="{{param}}">复制</a>
    
    还有些能用到的命令,备忘
    • python manage.py createsuperuser 创建管理员帐号密码
    • manage.py check --deploy 检查代码
    • python manage.py runserver --insecure

    生产环境

    部署到生产环境中遇到的坑大部分都是引用静态文件带来的,setting设置里面debug设为False, 需要设置ALLOWED_HOSTS,不然运行不了的。还需要设置STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    然后执行python manage.py collectstatic将静态文件全部复制到根目录下static里。

    Gunicorn + Nginx + Django 部署

    Nginx需要静态文件的反向代理,其他设置跟Flask需要设置的一样

    location /static {
      alias /path/to/static/;
    }
    

    Gunicorn也差不多的设置,新建一个gunicorn.conf文件

    bind = "127.0.0.1:5000"
    workers = 3
    backlog = 2048
    worker_class = "gevent"
    proc_name = "gunicorn.pid"
    pidfile = "/tmp/gunicorn.pid"
    accesslog = "/log/path/"
    loglevel = "debug"
    daemon = True
    

    gunicorn -c gunicorn.conf yourproject.wsgi:application 跑起来

    Django DEBUG=False时静态文件404的问题

    设置urls.py

    from django.views.static import serve
    from django.conf import settings
    
    if not settings.DEBUG:
        urlpatterns += [url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT})]
    

    大致就这样吧,比起Flask的轻便来,我觉得可能小项目的话还是使用Flask简单粗暴,不过Django的admin页面倒是挺人性化的,能够按需定制这点很好。

    相关文章

      网友评论

      本文标题:讲一讲Django开发中遇到的坑

      本文链接:https://www.haomeiwen.com/subject/mhbtmttx.html