9

Django 2.0.7 使用小知识

 4 years ago
source link: http://www.cnblogs.com/guapitomjoy/p/12045865.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Django 2.0.3 使用小知识

运行环境:

Python 3.6.4

Django 2.0.7

Django Admin中model显示为中文

定义model时,定义一个Meta对象,设置需要显示的中文名称。verbose_name为单数名称,verbose_name_plural为复数名称。因为中文没有区分单数、复数,所以都定义为一样的名称。

from django.db import models

class Article(models.Model):

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

Django Admin中model字段显示为中文

定义model时,在每个字段后增加verbose_name,如下例子中的title

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),做如下修改

# 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注释掉即可。

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 时区设置

此笔记为转载

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

如果 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK