继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

讲一讲Django开发中遇到的坑

临摹微笑
关注TA
已关注
手记 294
粉丝 32
获赞 169

记录下用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 settingINSTALLED_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 servefrom django.conf import settingsif not settings.DEBUG:
    urlpatterns += [url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT})]

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



作者:ioiogoo
链接:https://www.jianshu.com/p/65e619d7c552

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP