Django 2.0.7 使用小知识

Django 2.0.3 使用小知识

运行环境:python

Python 3.6.4django

Django 2.0.7app


Django Admin中model显示为中文

定义model时,定义一个Meta对象,设置须要显示的中文名称。verbose_name为单数名称,verbose_name_plural为复数名称。由于中文没有区分单数、复数,因此都定义为同样的名称。this

from django.db import models

class Article(models.Model):

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章'

Django Admin中model字段显示为中文

定义model时,在每一个字段后增长verbose_name,以下例子中的titleurl

class Article(models.Model):

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章'

    title = models.CharField(max_length=256, verbose_name='标题')

Django Admin中的app显示为中文

在须要自定义名称的app中(假设app目录的blog),作以下修改spa

# blog/apps.py
from django.apps import AppConfig

class BlogConfig(AppConfig):
    name = 'blog'
    verbose_name = '我的博客'
# blog/__init__.py
default_app_config = 'blog.apps.HealthConfig'

警告:?: (urls.W005) URL namespace 'admin' isn't unique. You may not be able to reverse all URLs in this namespace

在urls.py中的urlpatterns中重复定义了admin,因此会有此警告,将重复定义的url注释掉便可。code

urlpatterns = [
    url('', admin.site.urls),
    url(r'^jet/', include('jet.urls', 'jet')),
    # 注释掉此行
    # url(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls')),
]

Django 时区设置

此笔记为转载orm

在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONEUSE_TZserver

若是USE_TZ设置为True时,Django会使用系统默认设置的时区,即America/Chicago,此时的TIME_ZONE无论有没有设置都不起做用。对象

若是USE_TZ 设置为False,而TIME_ZONE设置为None,则Django仍是会使用默认的America/Chicago时间。若TIME_ZONE设置为其它时区的话,则还要分状况,若是是Windows系统,则TIME_ZONE设置是没用的,Django会使用本机的时间。若是为其余系统,则使用该时区的时间,入设置USE_TZ = False, TIME_ZONE = 'Asia/Shanghai', 则使用上海的UTC时间。

修改Django默认端口号

Django默认端口号是8000,能够在启动runserver的时候,指定端口号,例如 python manage.py runserver 0.0.0.0:8001

但这样每次启动都须要执行端口号的相关命令,理想的状态下,是能够将端口号配置在配置文件中,启动时,根据配置文件自动选择对应的端口号

参考:https://stackoverflow.com/questions/23639085/django-change-default-runserver-port

对项目根目录的manage.py进行修改,主要是注释下面的部分,同时也能够修改默认地址。

#!/usr/bin/env python
import os
import sys
from django.conf import settings

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", cmdline.settings)
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    from django.core.management.commands.runserver import Command
    # 修改默认地址
    Command.default_addr = settings.HOST
    # 修改默认端口号
    Command.default_port = settings.PORT
    execute_from_command_line(sys.argv)

QueryDict转dict

Django中,request的POST和GET属性,都是QueryDict的实例,直接用dict(request.GET)进行转换(假设HttpRequest的实例为request),会发送value都为list的状况,即便value只是一个string,也会变成['张三'],正确的方法应该是request.GET.dict(),POST也是一样的方法。

form_data = request.POST.dict()

JsonResponse接受非dict对象

默认状况下,JsonResponse要求接受一个dict对象,若是传入list等非dict对象,对引起TypeError。这个时候在JsonResponse的参数中增长safe为False(默认为True),使其处理非dict对象。

return JsonResponse([], safe=False)

强制Django渲染静态文件

在Django的Debug模式关闭后,默认不会渲染静态文件。合理的作法应该是将静态文件部署到Nginx上,再Django中再进行配置。可是有些状况,好比项目规模极小,不但愿引入Nginx,能够经过命令强制Django渲染静态文件。

python manage.py runserver --insecure

相关文章
相关标签/搜索