一個超級小的 Django 項目.
Posted November 12, 2018
Django 可以支持類似於Flask 一樣的單文件項目.
當用最簡單的代碼實現 Django 項目爲最基本的要素的時候, 項目可以和微框架一樣小.
但我建議, 最好不要這樣做, 因爲在選擇使用 Django 的時候, 我比較看重的 Django 封裝的一系列模塊, 我更建議用 Django 官方提供的架構去開始我的工程。
Introduction
首先我們知道, 在我們安裝 Django 之後, Django 和其他 Python 包一樣, 在site-packages裏面, 這意味着 Django 和其他的 Python 包一樣(Requests, Pillow, NumPy).
驗證 Django 是否安裝最簡單的方法是到交互式界面導入它
>>> import django >>> print(django.get_version()) 1.11.4
但是我們使用 Django 和使用其他包不一樣, 在官方推薦的例子下, 我們開始一個項目首先執行的是startproject
我們執行後, 會初始化創建默認的項目目錄結構:
- manage.py
- settings.py
- urls.py
- wsgi.py
這就是常用的預配置
加入我們要做一個 web 項目, 你可能需要數據庫, 處理用戶的身份驗證, 和會話等功能。 startproject
會讓我們對這些的處理和配置更加輕鬆. 而且 Django 默認就提供這些功能, 這讓我們能夠直接引用.
但這樣不是開始項目的唯一方式, 這也是本章的目的。
最小的 Django 程序
app.py
import sys from django.conf import settings from django.conf.urls import url from django.core.management import execute_from_command_line from django.http import HttpResponse settings.configure( DEBUG=True, SECRET_KEY='A-random-secret-key!', ROOT_URLCONF=sys.modules[__name__], ) def index(request): return HttpResponse('<h1>A minimal Django response!</h1>') urlpatterns = [ url(r'^$', index), ] if __name__ == '__main__': execute_from_command_line(sys.argv)
SECRET_KEY是我們必須要提供的一個參數, DEBUG默認是 False, 沒有開啓 DEBUG 的情況需要定義ALLOWED_HOSTS配置, 所以我們直接覆蓋 DEBUG 爲 True. ROOT_URLCONF 是需要包含 URL 列表的特殊模塊路徑. 其實就是我們項目的urls.py文件. 在這裏我們寫到一個文件裏面了, 所以我們直接定義sys.modules[__name__]
表示當前模塊, 並在當前文件下面定義urlpatterns列表, 定義的方式和urls.py一樣和視圖view對應起來.
然後通過execute_from_command_line
快捷方式啓動, 這個保留了 manage.py 命令的功能.
使用
由於沒有其他的APP 在 INSTALLED_APPS裏面, 默認情況下只有 django 項目. 所以只有一些最基本的命令功能.
$ python app.py Type 'app.py help <subcommand>' for help on a specific subcommand. Available subcommands: [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate runserver sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver
啓動
我們使用 runserver 把程序啓動
$ python app.py runserver