官术网_书友最值得收藏!

1.1.4 創建應用

項目已經創建好,網站也有了,接下來要實現網站的具體功能。在Django中,把這些具體的功能稱為“應用”(application)。

進入剛才創建的項目目錄中,即manage.py文件所在的目錄,然后按照下面的方式操作:

    $ ls
    db.sqlite3   manage.py    mysite
    $ python3 manage.py startapp blog   #①
    $ ls
    blog    db.sqlite3   manage.py    mysite

從上述操作中可以看出,執行了語句①之后,在目錄中多了一個名為blog的目錄。如果觀察這時候的mysite2目錄結構,會看到blog里面已經有默認的文件和目錄了,如圖1-6所示。

圖1-6 含有blog應用的目錄結構

blog就是項目mysite中的一個應用。在新的應用創建后,Django會自動在這個應用中增加一些文件。

請認真觀察圖1-6所示的項目結構,其中不僅有新建的應用blog,還有mysite目錄和manage.py等文件。目前這已經是一個相對完善的網站項目結構了,下面依次對各個部分進行簡要說明。

1. manage.py

在了解manage.py之前,先講解創建項目時用到的django-admin.py,它是Django的任務管理命令行工具。可以通過下面的方式查看django-admin命令的幫助信息和所支持的命令行參數:

    $ django-admin
    Type 'django-admin 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

請讀者耐心地把這些命令行參數都看一下,留個印象。

看到startapp和startproject了吧!在創建項目的命令中,我們使用了startproject。這里還有一個startapp,這個參數在剛剛創建的操作①中出現了,但不是用在django-admin后面,而是用于python manage.py的參數,那么這里的startapp是什么意思呢?

    $ django-admin help startapp
    usage: django-admin startapp [-h] [--template TEMPLATE]
                            [--extension EXTENSIONS] [--name FILES]
                            [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                            [--pythonpath PYTHONPATH] [--traceback]
                            [--no-color] [--force-color]
                            name [directory]

   Creates a Django app directory structure for the given app name in the current
    directory or optionally in the given directory.

   positional arguments:
      name               Name of the application or project.
      directory           Optional destination directory

   optional arguments:
      -h, --help          show this help message and exit
      --template TEMPLATE  The path or URL to load the template from.
      --extension EXTENSIONS, -e EXTENSIONS
                        The file extension(s) to render (default: "py").
                        Separate multiple extensions with commas, or use -e
                        multiple times.
      --name FILES, -n FILES
                        The file name(s) to render. Separate multiple file
                        names with commas, or use -n multiple times.
      --version           show program's version number and exit
      -v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
    --settings SETTINGS  The Python path to a settings module, e.g.
                      "myproject.settings.main". If this isn't provided, the
                      DJANGO_SETTINGS_MODULE environment variable will be
                      used.
    --pythonpath PYTHONPATH
                      A directory to add to the Python path, e.g.
                      "/home/djangoprojects/myproject".
    --traceback         Raise on CommandError exceptions
    --no-color          Don't colorize the command output.
    --force-color       Force colorization of the command output.

用django-admin help來查看一下,發現startapp這個參數也是用于創建應用的,與python3 manage.py startapp application_name中startapp的功能一樣。

仔細地閱讀幫助信息,然后把剛剛建立的項目中的blog應用刪除,再用django-admin startapp blog試一下:

    Chees-MBP:mysite2 qiwsir$ ls
    blog    db.sqlite3   manage.py    mysite
    Chees-MBP:mysite2 qiwsir$ rm -rf ./blog
    Chees-MBP:mysite2 qiwsir$ ls
    db.sqlite3   manage.py    mysite
    Chees-MBP:mysite2 qiwsir$ django-admin startapp blog   #②
    Chees-MBP:mysite2 qiwsir$ ls
    blog    db.sqlite3   manage.py    mysite

語句②和語句①的形式不同,但效果一樣,也建立了應用blog,如果用tree命令查看目錄結構,會發現與前面的目錄結構一模一樣。

既然django-admin startapp blog和python manage.py startapp blog是殊途同歸的,那么manage.py是什么呢?

在創建一個Django項目后,manage.py在項目的根目錄中被自動生成,它是對django-admin.py的簡單封裝,同樣能夠實現命令行操作:

    Chees-MBP:mysite2 qiwsir$ python3 manage.py
    Type 'manage.py help <subcommand>' for help on a specific subcommand.
    Available subcommands:
    [auth]
        changepassword
        createsuperuser
    [contenttypes]
        remove_stale_contenttypes
    [django]
        check
        compilemessages
        createcachetable
        dbshell
        diffsettings
        dumpdata
        flush
        inspectdb
        loaddata
        makemessages
        makemigrations
        migrate
        sendtestemail
        shell
        showmigrations
        sqlflush
        sqlmigrate
        sqlsequencereset
        squashmigrations
        startapp
        startproject
        test
        testserver
    [sessions]
        clearsessions
    [staticfiles]
        collectstatic
        findstatic
        runserver

與django-admin進行對比,兩者內容大體相同,同時manage.py還有自己的特點。

django-admin命令對應著django-admin.py文件,它在Django安裝后保存在Django安裝目錄的/bin下面。

而mange.py只在建立了一個項目之后,才存在于項目的根目錄中。

關于這兩種命令行方式的更多辨析,讀者可以閱讀官方提供的內容:https://docs. djangoproject.com/en/2.1/ref/django-admin。注意觀察這個地址,其中“2.1”表示的是Django版本號。如果讀者使用的版本與本書有異,一般來講修改這個版本號即可查看相應內容。

最后提示讀者,對于項目根目錄中的manage.py文件,不要修改,也不要刪除,后面我們會經常使用它。

2. mysite

mysite是所建項目的管理功能目錄(不是項目所在的目錄mysite2),這個目錄的名稱因用戶所創建的項目名稱的不同而異,雖然可以在這個目錄中輸入應用部分的內容,但在類似本書的多應用項目中一般不這么做。它包含的幾個文件常用于面向整個項目進行參數配置。

· settings.py:這個文件中包括了項目的初始化設置,可以針對整個項目進行有關參數配置,比如配置數據庫、添加應用等。

· urls.py:這是一個URL配置表文件(或稱為“模塊”,在Python中,模塊就是程序文件。此URL配置文件/模塊,英文表示為URLconf,即URL configureation),主要將URL映射到應用程序上。當用戶請求某個URL時,Django項目會根據這個文件中的映射關系指向某個目標對象,該對象可以是某個應用中的urls.py文件,也可以是某個具體的視圖函數。

· wsgi.py:WSGI是Web Server Gateway Interface的縮寫。讀者可能聽說過CGI, CGI是Common Gateway Interface的縮寫,與WSGI有所不同。WSGI是Python所選擇的服務器和應用標準,Django也會使用。wsgi.py文件定義了我們所創建的項目都是WSGI應用。關于WSGI的更多知識可以參閱http://wsgi.readthedocs.io/en/latest/index.html

· __pycache__:如果創建項目后,不執行python manage.py runserver命令,不在瀏覽器中查看網站是否運行,那么它是不存在的。只有網站運行后,它才會出現。它其實是一個編譯后的文件夾。看一下里面的文件,都是以.pyc結尾的文件。關于編譯問題,筆者已經在《跟老齊學Python:輕松入門》中講述過了,請查看相關章節。

3. blog

blog是在項目中所創建的應用之一,注意是之一,用創建應用的指令還可以創建很多其他的應用。每創建一個新的應用,Django就會在項目根目錄(./)中創建一個子目錄,并且目錄中會有一些默認的文件。

· admin.py:在這個文件中,可以自定義Django管理工具,比如設置在管理界面能夠管理的項目,或者通過重新自定義與系統管理有關的類對象,向管理功能增加新的內容。

· apps.py:這個文件是Django 1.10之后增加的,通常包含對應用的配置,比如為管理功能提供一個合適的應用名稱。

· migrations:這是一個目錄,用于存儲應用的數據庫表結構的指令,通過這些指令可以修改和創建數據庫,從而在models.py模型類和數據庫表之間遷移。

· models.py:這是應用的數據模型,每個Django應用都應當有一個models.py文件,雖然該文件可以為空,但不宜刪除。

· tests.py:在這個文件中可以編寫測試文檔來測試所建立的應用。

· views.py:這是一個重要的文件,用于保存響應各種請求的函數或者類。如果編寫的是函數,則稱為基于函數的視圖;如果編寫的是類,則稱為基于類的視圖。views.py就是保存函數或者類的視圖文件。當然,也可以用其他的文件名稱,只不過在引入相應函數或者類時,要注意名稱的正確性,views.py是我們習慣使用的文件名稱。

4. db.sqlite3

這是一個默認的數據庫。SQLite是Python默認安裝的數據庫,在Django中也可以默認使用。因為到現在為止我們還沒有配置數據庫,所以就有了一個默認的文件(這個默認文件是在./mysite/settings.py中配置生成的)。

至此,讀者已經初步了解了Django項目的基本結構。若要讓網站呈現紛繁多樣的功能,還需要進行一些配置。

主站蜘蛛池模板: 营山县| 宝鸡市| 东宁县| 安多县| 翁牛特旗| 益阳市| 滨州市| 田东县| 曲水县| 乐平市| 昂仁县| 香港 | 鸡东县| 扶风县| 巴楚县| 刚察县| 平南县| 吉隆县| 万安县| 方山县| 西充县| 台安县| 清涧县| 博野县| 崇义县| 万山特区| 厦门市| 凤冈县| 乐都县| 论坛| 启东市| 克拉玛依市| 望江县| 屯门区| 新野县| 屏山县| 汝阳县| 平邑县| 东港市| 怀集县| 永昌县|