venv
目錄並建立虛擬環境,使用 IDE 自帶的終端也會默認激活虛擬環境涉及到的知識:css
直接採用 PyCharm 初始化一個 Django 項目html
. ├── db.sqlite3 # 默認的 sqlite 數據庫文件 ├── manage.py # 啓動腳本 ├── mxoline # 主要配置存放路徑 │ ├── __init__.py │ ├── settings.py # 全局配置 │ ├── urls.py # url 配置文件 │ └── wsgi.py └── templates # html 文件模板
$ django-admin startapp message
生成的 app 結構:python
└── message ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.py
防止項目過大的時候,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
中添加一個 form.html
文件(也算是懶到家了,就直接用 curl 拉取了)
$ cd templates $ curl -L https://raw.githubusercontent.com/missxiaolin/python-django/1860df7790a5daefafd2c052c1e3afedbbc48151/templates/mesage_form.html > message_form.html
在這裏指定 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')
目的是將剛纔的 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')) ]
這裏的處理方式和教程中的不太同樣,首先教程基於的是 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
的話,咱們在每次引用 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
,不太方便。
這樣 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 文件的路徑不正確,因此須要在 settings.py
文件中設置 static
路徑。
靜態資源路徑能夠有多個,因此這裏使用一個列表進行配置:
# {BASE_DIR}/mxonline/settings.py STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ]
再次進入 127.0.0.1:8000,完美~
如今只涉及到了項目的配置和一些基礎的配置,沒有涉及到 Django 請求從開始到完成的任何內容。下篇教程將集中進行記錄。