摘要:靜態(tài)資源路徑可以有多個,所以這里使用一個列表進(jìn)行配置再次進(jìn)入,完美后記現(xiàn)在只涉及到了項(xiàng)目的配置和一些基礎(chǔ)的配置,沒有涉及到請求從開始到完成的任何內(nèi)容。下篇教程將集中進(jìn)行記錄。
前言
推薦使用 virtualenv 創(chuàng)建 python 虛擬環(huán)境,防止因?yàn)槭褂?pip 安裝依賴到全局引起版本沖突的問題,PyCharm 默認(rèn)會生成一個 venv 目錄并創(chuàng)建虛擬環(huán)境,使用 IDE 自帶的終端也會默認(rèn)激活虛擬環(huán)境
使用的教程基于 Django 1.9.8,現(xiàn)在 Django 已經(jīng)升級到了 2.0.3,所以可能會有部分寫法不太常見
涉及到的知識:
初始化項(xiàng)目
注冊項(xiàng)目
database 配置
生成 Django 默認(rèn)表,沒有配置 model
view 和 template 配置
url 配置(包括配置 name)
靜態(tài)文件路徑配置
基礎(chǔ)環(huán)境Pycharm 2018
Django 2.0.3
Python 3.6.4
mxonline start 分支
Python升級3.6 強(qiáng)力Django+殺手級Xadmin打造在線教育平臺
目錄結(jié)構(gòu) 初始結(jié)構(gòu)直接采用 PyCharm 初始化一個 Django 項(xiàng)目
. ├── db.sqlite3 # 默認(rèn)的 sqlite 數(shù)據(jù)庫文件 ├── manage.py # 啟動腳本 ├── mxoline # 主要配置存放路徑 │?? ├── __init__.py │?? ├── settings.py # 全局配置 │?? ├── urls.py # url 配置文件 │?? └── wsgi.py └── templates # html 文件模板新建 app
$ django-admin startapp message
生成的 app 結(jié)構(gòu):
└── message ├── __init__.py ├── admin.py ├── apps.py ├── migrations │?? └── __init__.py ├── models.py ├── tests.py └── views.py新建其他目錄
log:存放 log 日志
static:存放靜態(tài)資源
media:存放用戶上傳的媒體文件
最終的項(xiàng)目結(jié)構(gòu)防止項(xiàng)目過大的時候,app 過多難以管理
. ├── apps # app 集中存放,防止當(dāng)項(xiàng)目規(guī)模變大難以管理 │?? └── message # 新建的 message app ├── db.sqlite3 # 默認(rèn)的 sqlite 數(shù)據(jù)庫 ├── log # 存放 log 日志 ├── manage.py # 啟動腳本 ├── media # 用戶上傳的媒體文件 ├── mxoline # 項(xiàng)目主要配置目錄 │?? ├── __init__.py # 初始化文件 │?? ├── __pycache__ # │?? ├── settings.py # django 框架全局配置文件 │?? ├── urls.py # url 映射關(guān)系配置文件 │?? └── wsgi.py # ├── static # 靜態(tài)資源文件 ├── templates # 模板存放目錄 └── venv # PyCharm 創(chuàng)建的虛擬 Python 環(huán)境 ├── bin ├── include ├── lib ├── pip-selfcheck.json └── pyvenv.cfg項(xiàng)目初體驗(yàn) 注冊項(xiàng)目
每次創(chuàng)建一個 App,我們都需要在 settings.py 中進(jìn)行注冊:
# {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 項(xiàng)目。
配置數(shù)據(jù)庫默認(rèn)使用的是 sqlite,我們在這里使用 mysql(有坑預(yù)警,昨天晚上查了好久)
進(jìn)入 setting 文件,默認(rèn)的配置情況是這個樣子的:
# {BASE_DIR}/mxonline/settings.py DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": os.path.join(BASE_DIR, "db.sqlite3"), } }
修改成這個樣子:
# {BASE_DIR}/mxonline/settings.py DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", # 使用mysql引擎 "NAME": "test_django", # 數(shù)據(jù)庫名稱 "USER": "root", # 用戶 "PASSWORD": "root", # 密碼 "HOST": "127.0.0.1" # 地址 } }
然后需要安裝 mysql 的驅(qū)動,mac 下會出現(xiàn)裝不上的情況,具體可以參考這里,自行修改 mysql-config 文件。
# 這里是 mac 的驅(qū)動,使用Windows 同學(xué)對不起啊。 $ pip install mysqlclient
Windows 上需要自行下載 mysql-python 驅(qū)動,好像也挺多坑的,按下不表。
生成數(shù)據(jù)表在 Pycharm 中,點(diǎn)擊 Tools 中的 Run manage.py Task,然后就可以在里邊快捷的運(yùn)行 manage.py 提供的各種腳本了。
如果在命令行中運(yùn)行的話,需要在下面的命令前邊加上 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 數(shù)據(jù)庫查看一下是不是生成了一堆數(shù)據(jù)表:
$ 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)
當(dāng)然可以使用 Navicat 進(jìn)行查看,這里就不截圖了。
查看歡迎頁面runserver
然后可以訪問 127.0.0.1:8000,查看是否進(jìn)入了 django 的默認(rèn)歡迎頁面。
新建 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 的關(guān)系,默認(rèn)的 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 創(chuàng)建 url 映射
目的是將剛才的 form.html 頁面呈現(xiàn)出來。
進(jìn)入生成項(xiàng)目的時候生成的和項(xiàng)目名稱相同的那個目錄下邊的 urls.py 文件中,和 settings.py 文件同級,文件已經(jīng)配置好了 /admin 路由:
# {BASE_DIR}/mxonline/urls.py from django.contrib import admin from django.urls import path urlpatterns = [ path("admin/", admin.site.urls), ]
需要添加自己的配置項(xiàng),這里和 1.9.8 不太一樣,不需要使用正則,正則對應(yīng)的是 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 內(nèi)部維護(hù) url 文件
這里的處理方式和教程中的不太一樣,首先教程基于的是 Django 的 1.9.8 版本,配置路由需要使用到正則表達(dá)式相關(guān)的知識。其次教程在這里對 app 中的 url 進(jìn)行了處理,我選擇的方式則是在 app 自己的目錄中維護(hù)自己的 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 參數(shù),這個參數(shù)在后邊會非常有用,因?yàn)樵?template 中可以通過 name 來指定 url。
解決模塊引用問題在配置完成 url 之后,運(yùn)行 runserver 之后(或者在命令行中運(yùn)行 python manage.py runserver),會報錯:
ModuleNotFoundError: No module named "message"
意思是找不到名字叫 message 的這個模塊。
因?yàn)槲覀兊?message app 之前已經(jīng)被我們放到了 apps 目錄下,所以我們的解決方法會有兩種:
如果不想要修改 settings.py 的話,我們在每次引用 apps 下面的應(yīng)用的話,需要指定路徑。所以修改文件如下:
# {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"))
這里我選擇的是第二種處理方式。
這樣我們點(diǎn)擊進(jìn)去 127.0.0.1:8000 就應(yīng)該能看到 message_form.html 頁面文件了。
解決 CSS 路徑不正確的問題在進(jìn)入頁面的時候,我們會發(fā)現(xiàn) css 文件的路徑不正確,所以需要在 settings.py 文件中設(shè)置 static 路徑。
靜態(tài)資源路徑可以有多個,所以這里使用一個列表進(jìn)行配置:
# {BASE_DIR}/mxonline/settings.py STATICFILES_DIRS = [ os.path.join(BASE_DIR,"static") ]
再次進(jìn)入 127.0.0.1:8000,完美~
后記現(xiàn)在只涉及到了項(xiàng)目的配置和一些基礎(chǔ)的配置,沒有涉及到 Django 請求從開始到完成的任何內(nèi)容。下篇教程將集中進(jìn)行記錄。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41443.html
摘要:結(jié)論執(zhí)行完任務(wù)不釋放內(nèi)存與原一直沒有被銷毀有關(guān),因此可以適當(dāng)配置小點(diǎn),而任務(wù)并發(fā)數(shù)與配置項(xiàng)有關(guān),每增加一個必然增加內(nèi)存消耗,同時也影響到一個何時被銷毀,因?yàn)槭蔷鶆蛘{(diào)度任務(wù)至每個,因此也不宜配置過大,適當(dāng)配置。 1.實(shí)際使用 ? 監(jiān)控task的執(zhí)行結(jié)果:任務(wù)id,結(jié)果,traceback,children,任務(wù)狀態(tài) ? 配置 backend=redis://127...
摘要:實(shí)現(xiàn)項(xiàng)目的配置初始化,這個有些像我們在寫模塊的時候初始化配置,其實(shí)這里也是在初始化項(xiàng)目配置。 引言 首先簡單說一下Ruff,Ruff是一個JavaScript運(yùn)行時,專門為開發(fā)硬件而設(shè)計(jì),其底層實(shí)現(xiàn)是基于Node.js,讓我們可以使用JavaScript語言去實(shí)現(xiàn)自己想要的硬件功能設(shè)計(jì),下面就是從零開始接觸和學(xué)習(xí)使用Ruff showImg(https://segmentfault.c...
摘要:無論是將其用作的服務(wù)器反向代理服務(wù)器負(fù)載均衡器,還是同時使用以上三種功能,和都能帶來很大好處。再就是下篇文章會介紹如何把和當(dāng)作反向代理服務(wù)器和多個應(yīng)用程序服務(wù)器的負(fù)載均衡器。而使用將會有助于解決這一問題。 【編者按】本文主要介紹 nginx 的主要功能以及如何通過 NGINX 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 Python 的著名之...
摘要:無論是將其用作的服務(wù)器反向代理服務(wù)器負(fù)載均衡器,還是同時使用以上三種功能,和都能帶來很大好處。再就是下篇文章會介紹如何把和當(dāng)作反向代理服務(wù)器和多個應(yīng)用程序服務(wù)器的負(fù)載均衡器。而使用將會有助于解決這一問題。 【編者按】本文主要介紹 nginx 的主要功能以及如何通過 NGINX 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 Python 的著名之...
摘要:準(zhǔn)備工作開發(fā)工具下載地址竟然隱藏在一個超鏈接里,真的很不醒目啊文檔地址初次體驗(yàn)新建項(xiàng)目的時候,可以選擇是小程序小游戲,這次我體驗(yàn)的是小程序的開發(fā)。可以配置小程序邊界的,如頂部的導(dǎo)航欄的一些樣式。 很早前就想體驗(yàn)一把小程序的開發(fā)了,如果熟悉三大框架的話,小程序的開發(fā)還是很容易上手的,所以只要跟著做一個小應(yīng)用,加上官方的文檔就十分好學(xué)了。加上官方提供的開發(fā)工具也比較簡潔好用,初次體驗(yàn)的我覺...
閱讀 1585·2021-09-30 09:47
閱讀 3581·2021-09-22 15:05
閱讀 2829·2021-08-30 09:44
閱讀 3617·2019-08-30 15:55
閱讀 1365·2019-08-30 13:08
閱讀 1322·2019-08-29 16:40
閱讀 544·2019-08-29 12:45
閱讀 1379·2019-08-29 11:25