本文根據(jù)慕課網(wǎng)Djiango學(xué)習(xí)視頻學(xué)習(xí)。
前言:發(fā)現(xiàn)學(xué)習(xí)的東西,一段時(shí)間沒(méi)有用,就又忘記了,迷迷糊糊的。不行的寫(xiě)下來(lái),做個(gè)記錄。
該文很大部分參考了慕課網(wǎng)django的學(xué)習(xí)視頻。
項(xiàng)目創(chuàng)建開(kāi)發(fā)流程
在相關(guān)環(huán)境搭建好之后,使用pycharm新建項(xiàng)目。方便快捷。
1.創(chuàng)建虛擬環(huán)境
目的就是每個(gè)項(xiàng)目的使用的包分開(kāi),如果不用虛擬環(huán)境,每個(gè)項(xiàng)目的三方包都安裝在同一個(gè)環(huán)境下,增大體積
1.安裝 virtualenv

2.在指定的目錄創(chuàng)建虛擬文件目錄

3.進(jìn)入創(chuàng)建的目錄下的Scripts執(zhí)行activete.bat

進(jìn)入虛擬環(huán)境。pip list 查看安裝的庫(kù)

退出執(zhí)行 deactivate.bat
用pychorm創(chuàng)建項(xiàng)目的時(shí)候,就選擇這個(gè)環(huán)境
2.創(chuàng)建項(xiàng)目,并觀察目錄
django-admin startproject myblog
創(chuàng)建項(xiàng)目.以下是初始化的項(xiàng)目結(jié)構(gòu)。

WSGI: Python服務(wù)器網(wǎng)管接口(不修改)
URLS:配置URL
Setting:(核心部分)
3.1創(chuàng)建App應(yīng)用
在pycharm中,也能生成app>tooks>

輸入 命令 startapp “名字” 就能生成app模塊

一些細(xì)節(jié)注意
創(chuàng)建static 目錄用于存放靜態(tài)html文件
。需要在setting中設(shè)置引用靜態(tài)文件的配置
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
創(chuàng)建log目錄用于存放log日志
因?yàn)樯婕暗酱娣盼募? 所以創(chuàng)建 media目錄。
重點(diǎn):
后面可能有多個(gè)app,所以創(chuàng)建apps目錄,把a(bǔ)pp名字拖入.會(huì)自動(dòng)創(chuàng)建init.py
把a(bǔ)pp名字 mark成sorcuess.。在setting 設(shè)置 才能識(shí)別sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
應(yīng)用目錄
migrations 數(shù)據(jù)遷移模塊
admin.py 后臺(tái)管理系統(tǒng)配置
apps.py 當(dāng)前應(yīng)用的一些配置。沒(méi)什么意思
models.py 數(shù)據(jù)模塊 (ORM)
test.py 自動(dòng)化測(cè)試,測(cè)試腳本
views.py 執(zhí)行響應(yīng)的邏輯代碼(重要)
3.3修改端口號(hào)
python manage.py runserver 9090
3,3.開(kāi)啟服務(wù):
CMD窗口下該目錄下 python manage.py runserver
此時(shí)可以在瀏覽器打開(kāi)改地址。顯示正確就說(shuō)明成功了。
==================
創(chuàng)建第一個(gè)界面:
UR分發(fā),都要傳遞一個(gè)request對(duì)象,
在views.py中編輯
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello world").
Urls配置的優(yōu)化,由于項(xiàng)目越來(lái)越大。在blog 應(yīng)用中創(chuàng)建urls 配置url后綴
提示,新版的django,在url中不用r這些正則

如果存在多個(gè)app了,可以在每個(gè)app下設(shè)置urls,并使用include來(lái)()導(dǎo)入

這樣子整個(gè)請(qǐng)求地址為

3.3模板的創(chuàng)建,什么是template
HTML文件,模板語(yǔ)言 DTL
3.4創(chuàng)建模板
1.在APP 的根目錄下,即blog下創(chuàng)建 templates的目錄
在該目錄下創(chuàng)建HTML代碼,index.html文件
在views.py中返回一個(gè)render()
render(reuest,"*.html",字典)
該字典是后臺(tái)傳遞到模板的參數(shù),鍵為參數(shù)名

def login(request):
return render(request, 'index.html', {"hello": "我是蒲小帥"})
在index.html中獲取
<h1>{{hello}}</h1>就能獲取到我是蒲小帥
****注意
Django按照InSTALLED_APPS的添加順序查找Templates,不同APP下Templates目錄下的同名.html會(huì)造成沖突
解決方法:
在templates目錄下創(chuàng)建于app目錄相同的文件夾,并將html文件放在其中。
3.5models介紹
在生成app應(yīng)用目錄時(shí),自動(dòng)為我們創(chuàng)建了models.py,并引入models

有了model,把其生成為數(shù)據(jù)表
3.6生成數(shù)據(jù)表
1.python manage.py makemigrations app(名) 可選,不寫(xiě)的話,該應(yīng)用所有的都生成數(shù)據(jù)遷移。
2.python manage.py migrate

3.查看sql的語(yǔ)句 python manage.py sqlmigrate blog 0001

關(guān)聯(lián)MySql數(shù)據(jù)庫(kù)
在setting.py中修改,前提是已經(jīng)創(chuàng)建了數(shù)據(jù)庫(kù)

過(guò)程中提示沒(méi)有數(shù)據(jù)庫(kù)驅(qū)動(dòng),就要到虛擬環(huán)境中安裝。

到mysqlclient下載 mysqlclient-1.3.10-cp34-cp34m-win_amd64.whl。放到 虛擬環(huán)境錄下。用pip install 解壓他。
然后在客戶端,使用。
生成默認(rèn)數(shù)據(jù)表

在app下的model中創(chuàng)建類來(lái)操作數(shù)據(jù)字段。
比如:

然后mannager.py 先執(zhí)行 makemigrations messages,在執(zhí)行 makemigrations message這是app名字。
migrate message進(jìn)行查看過(guò)程。在navatat中可以看到默認(rèn)創(chuàng)建djiaogo_message的表,以及字段

常用數(shù)據(jù)類型
models.ForeignKey
models.DateField
models.IntegerField
models.IPAddressField
models.FileField
models.ImageField


創(chuàng)建超級(jí)賬戶
createsuperuser

xadmin
比admin界面更友好
推薦github上下載源碼,使用django2分支,解壓復(fù)制xadmin目錄到app同級(jí)目錄下。可能有相關(guān)內(nèi)容沒(méi)導(dǎo)入,用pycharm自行導(dǎo)入解壓。
在setting.py中添加
INSTALLED_APPS = [
# 'django.contrib.admin',
'xadmin',
'crispy_forms',注意這里有個(gè)逗號(hào)
]
導(dǎo)入 xadmin
,url中設(shè)置xamin

xadmin一些配置
1.配置主題,在user.admin中設(shè)置
class BaseSeting(object):
enable_themes=True
use_bootswatch=True
xadmin.site.register(views.BaseAdminView,BaseSeting)
必寫(xiě)在最后注冊(cè)不能寫(xiě)在第一位。不然估計(jì)初始化錯(cuò)誤。
class GlobalSettings(object):
site_title="后臺(tái)管理系統(tǒng)" #左上角文字
site_footer="@蒲小帥"#下方文字
menu_style="accordion" #設(shè)置菜單為收縮
xadmin.site.register(views.CommAdminView,GlobalSettings)
設(shè)置菜單顯示為中文,也就是app下面的文字
1.在相應(yīng)的app(operation)的app.py下添加 verbose_name="用戶操作"
2.2,在init下寫(xiě) default_app_config="operation.apps.OperationConfig"
前端uiSemantic-UI
繼續(xù)學(xué)習(xí)
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
urls中參數(shù)傳遞,
def hello(request,name):
name="你好,%s" %name
return HttpResponse(name)\
...
path('hello/<name>',views.hello)

帶?/?name就需要用get
def hi(request):
name=request.GET.get("name")
return HttpResponse("你好,"+name)
...
path('hi/',views.hi)

url命名,反轉(zhuǎn)url

比如 在redirect('/cms/'),需要改變的時(shí)候,需要改很多地方,那么我們就給他取個(gè)名字,就算地址變了,名字沒(méi)變。
第一步:path('hi/',views.hi,name="login")
第二步: from django.shortcuts import redirect,reverse
redirect(reverse('login'))
命名空間
cms,front中的urls的path的名稱name都一樣,重復(fù)了,那么在views中就不知道找誰(shuí)。在多個(gè)app之間,可能產(chǎn)生同名的url,反轉(zhuǎn)就會(huì)混淆
在各自的urls中,指定
app_name='front'
....
反轉(zhuǎn)的地方
reverse('front.login')
模板引擎
falsk jinjia2 django DTL模板引擎
兩種渲染方式:
1.render_to_string
def index(request):
html=render_to_string('index.html')
return HttpResponse(html)
2.render
return render(request,'index.html')
模板路徑設(shè)置
‘DIRS’,查找路徑,是個(gè)列表可設(shè)置多個(gè),
‘APP_DIRS’=true,如果在DIRS下沒(méi)找到,優(yōu)先在當(dāng)前app中尋找,找不到會(huì)在安裝了的app中看有沒(méi)有teamplates。(INSTALLED_APPS下,添加‘a(chǎn)pp’)
模板變量,語(yǔ)法,if,for
DTL常用過(guò)濾
add 把數(shù)據(jù)轉(zhuǎn)成int,在跟value進(jìn)行相加
{{value|add:"2"}}
flask {{ url_for('xxx',xxx='')}}
cut
{{value | cut :" "}} 剪掉空格
相當(dāng)于 replace(args,"")
date
{{birthday | date:''Y/m/d"}}
2018/12/27
模板繼承
{% extends 'xxx'%}
{% block body%}
{% endblock%}
跟flask一樣
{{block.super}}繼承父模板
{% url 'xxx'%}
加載靜態(tài)文件

'builtins':['django.templatetags.static']
#不與app下的static相關(guān)
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]