Django 2.0.3 使用筆記


運行環境:

Python 3.5.2

Django 2.0.3


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 = FalseTIME_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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM