Django 項目配置初體驗(一)

前言

  1. 推薦使用 virtualenv 建立 python 虛擬環境,防止由於使用 pip 安裝依賴到全局引發版本衝突的問題,PyCharm 默認會生成一個 venv 目錄並建立虛擬環境,使用 IDE 自帶的終端也會默認激活虛擬環境
  2. 使用的教程基於 Django 1.9.8,如今 Django 已經升級到了 2.0.3,因此可能會有部分寫法不太常見
  3. 涉及到的知識:css

    • 初始化項目
    • 註冊項目
    • database 配置
    • 生成 Django 默認表,沒有配置 model
    • view 和 template 配置
    • url 配置(包括配置 name)
    • 靜態文件路徑配置

基礎環境

  1. Pycharm 2018
  2. Django 2.0.3
  3. Python 3.6.4
  4. mxonline start 分支
  5. Python升級3.6 強力Django+殺手級Xadmin打造在線教育平臺

目錄結構

初始結構

直接採用 PyCharm 初始化一個 Django 項目html

.
├── db.sqlite3        # 默認的 sqlite 數據庫文件
├── manage.py         # 啓動腳本
├── mxoline           # 主要配置存放路徑
│   ├── __init__.py
│   ├── settings.py   # 全局配置
│   ├── urls.py       # url 配置文件
│   └── wsgi.py
└──  templates        # html 文件模板

新建 app

$ django-admin startapp message

生成的 app 結構:python

└── message          
    ├── __init__.py  
    ├── admin.py     
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

新建其餘目錄

  1. log:存放 log 日誌
  2. static:存放靜態資源
  3. media:存放用戶上傳的媒體文件

最終的項目結構

防止項目過大的時候,app 過多難以管理mysql

.
├── apps                 # app 集中存放,防止當項目規模變大難以管理
│   └── message          # 新建的 message app
├── db.sqlite3           # 默認的 sqlite 數據庫
├── log                  # 存放 log 日誌
├── manage.py            # 啓動腳本
├── media                # 用戶上傳的媒體文件
├── mxoline              # 項目主要配置目錄
│   ├── __init__.py      # 初始化文件
│   ├── __pycache__      # 
│   ├── settings.py      # django 框架全局配置文件
│   ├── urls.py          # url 映射關係配置文件
│   └── wsgi.py          # 
├── static               # 靜態資源文件
├── templates            # 模板存放目錄
└── venv                 # PyCharm 建立的虛擬 Python 環境
    ├── bin
    ├── include
    ├── lib
    ├── pip-selfcheck.json
    └── pyvenv.cfg

項目初體驗

註冊項目

每次建立一個 App,咱們都須要在 settings.py 中進行註冊:git

# {BASE_DIR}/mxonline/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.message'
]

能夠看到在列表中添加了 message 項目。github

配置數據庫

默認使用的是 sqlite,咱們在這裏使用 mysql(有坑預警,昨天晚上查了很久)正則表達式

進入 setting 文件,默認的配置狀況是這個樣子的:sql

# {BASE_DIR}/mxonline/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

修改爲這個樣子:shell

# {BASE_DIR}/mxonline/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用mysql引擎
        'NAME': 'test_django',                 # 數據庫名稱
        'USER': 'root',                        # 用戶
        'PASSWORD': 'root',                    # 密碼
        'HOST': '127.0.0.1'                    # 地址
    }
}

而後須要安裝 mysql 的驅動,mac 下會出現裝不上的狀況,具體能夠參考這裏,自行修改 mysql-config 文件。數據庫

# 這裏是 mac 的驅動,使用Windows 同窗對不起啊。
$ pip install mysqlclient

Windows 上須要自行下載 mysql-python 驅動,好像也挺多坑的,按下不表。

生成數據表

Pycharm 中,點擊 Tools 中的 Run manage.py Task,而後就能夠在裏邊快捷的運行 manage.py 提供的各類腳本了。

若是在命令行中運行的話,須要在下面的命令前邊加上 python manage.py

$ makemigrations
$ migrate

輸出大概以下:

bash -cl "/Users/zhoubao/workplace/python/mxoline/venv/bin/python /Applications/PyCharm.app/Contents/helpers/pycharm/django_manage.py migrate /Users/zhoubao/workplace/python/mxoline"
(B[mTracking file by folder pattern:  migrations
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK

能夠登陸本身的 mysql 數據庫查看一下是否是生成了一堆數據表:

$ mysql -uroot -proot
$ change test_django
$ show tables;

我這裏的輸出是這個樣子的:

+----------------------------+
| Tables_in_test_django      |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
10 rows in set (0.00 sec)

固然可使用 Navicat 進行查看,這裏就不截圖了。

查看歡迎頁面

runserver

而後能夠訪問 127.0.0.1:8000,查看是否進入了 django 的默認歡迎頁面。

新建 templates

先在 templates 中添加一個 form.html 文件(也算是懶到家了,就直接用 curl 拉取了)

$ cd templates
$ curl -L https://raw.githubusercontent.com/missxiaolin/python-django/1860df7790a5daefafd2c052c1e3afedbbc48151/templates/mesage_form.html > message_form.html

在 app 中新建 view

在這裏指定 view 和 template 的關係,默認的 templates 目錄就是 {BASE_DIR}/templates

# {BASE_DIR}/apps/message/views.py
from django.shortcuts import render


def getForm(request):
    return render(request, 'message_form.html')

爲 template 建立 url 映射

目的是將剛纔的 form.html 頁面呈現出來。

進入生成項目的時候生成的和項目名稱相同的那個目錄下邊的 urls.py 文件中,和 settings.py 文件同級,文件已經配置好了 /admin 路由:

# {BASE_DIR}/mxonline/urls.py
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

須要添加本身的配置項,這裏和 1.9.8 不太同樣,不須要使用正則,正則對應的是 re-path

# {BASE_DIR}/mxonline/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('message.urls'))
]

app 內部維護 url 文件

這裏的處理方式和教程中的不太同樣,首先教程基於的是 Django 的 1.9.8 版本,配置路由須要使用到正則表達式相關的知識。其次教程在這裏對 app 中的 url 進行了處理,我選擇的方式則是在 app 本身的目錄中維護本身的 url。

$ cd apps/message
$ touch urls.py
# {BASE_URL}/apps/message/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.getForm, name="go_form")
]

在這裏能夠指定一個 name 參數,這個參數在後邊會很是有用,由於在 template 中能夠經過 name 來指定 url

解決模塊引用問題

在配置完成 url 以後,運行 runserver 以後(或者在命令行中運行 python manage.py runserver),會報錯:

ModuleNotFoundError: No module named 'message'

意思是找不到名字叫 message 的這個模塊。

由於咱們的 message app 以前已經被咱們放到了 apps 目錄下,因此咱們的解決方法會有兩種:

不更改 settings.py

若是不想要修改 settings.py 的話,咱們在每次引用 apps 下面的應用的話,須要指定路徑。因此修改文件以下:

# {BASE_DIR}/mxonline/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('apps.message.urls'))
]

這樣雖然能用,可是每次都須要寫 apps,不太方便。

將 apps 設置爲模塊路徑

這樣 Django 就會在 apps 中去尋找 message 模塊(app)了:

# {BASE_DIR}/mxonline/settings.py
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

這裏我選擇的是第二種處理方式。

這樣咱們點擊進去 127.0.0.1:8000 就應該能看到 message_form.html 頁面文件了。

解決 CSS 路徑不正確的問題

在進入頁面的時候,咱們會發現 css 文件的路徑不正確,因此須要在 settings.py 文件中設置 static 路徑。

靜態資源路徑能夠有多個,因此這裏使用一個列表進行配置:

# {BASE_DIR}/mxonline/settings.py

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

再次進入 127.0.0.1:8000,完美~

後記

如今只涉及到了項目的配置和一些基礎的配置,沒有涉及到 Django 請求從開始到完成的任何內容。下篇教程將集中進行記錄。

相關文章
相關標籤/搜索