Djiango學(xué)習(xí)

本文根據(jù)慕課網(wǎng)Djiango學(xué)習(xí)視頻學(xué)習(xí)。

前言:發(fā)現(xiàn)學(xué)習(xí)的東西,一段時間沒有用,就又忘記了,迷迷糊糊的。不行的寫下來,做個記錄。
該文很大部分參考了慕課網(wǎng)django的學(xué)習(xí)視頻。

項目創(chuàng)建開發(fā)流程

在相關(guān)環(huán)境搭建好之后,使用pycharm新建項目。方便快捷。

1.創(chuàng)建虛擬環(huán)境

目的就是每個項目的使用的包分開,如果不用虛擬環(huán)境,每個項目的三方包都安裝在同一個環(huán)境下,增大體積

1.安裝 virtualenv
image.png
2.在指定的目錄創(chuàng)建虛擬文件目錄
image.png
3.進入創(chuàng)建的目錄下的Scripts執(zhí)行activete.bat
image.png

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


image.png

退出執(zhí)行 deactivate.bat
用pychorm創(chuàng)建項目的時候,就選擇這個環(huán)境

2.創(chuàng)建項目,并觀察目錄
django-admin startproject myblog

創(chuàng)建項目.以下是初始化的項目結(jié)構(gòu)。


image.png

WSGI: Python服務(wù)器網(wǎng)管接口(不修改)
URLS:配置URL
Setting:(核心部分)

3.1創(chuàng)建App應(yīng)用

在pycharm中,也能生成app>tooks>


image.png

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

或者打開命令行,進入項目manage.py同一級目錄。輸入 python manage.py startapp blog,添加應(yīng)用名 到setting.py 中的INSTALLED_APPS里面
image.png
一些細節(jié)注意
創(chuàng)建static 目錄用于存放靜態(tài)html文件
。需要在setting中設(shè)置引用靜態(tài)文件的配置
STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
創(chuàng)建log目錄用于存放log日志
因為涉及到存放文件  所以創(chuàng)建 media目錄。
重點:
后面可能有多個app,所以創(chuàng)建apps目錄,把app名字拖入.會自動創(chuàng)建init.py
把app名字  mark成sorcuess.。在setting  設(shè)置  才能識別sys.path.insert(0, os.path.join(BASE_DIR, "apps"))

應(yīng)用目錄
image.png

migrations 數(shù)據(jù)遷移模塊
admin.py 后臺管理系統(tǒng)配置
apps.py 當(dāng)前應(yīng)用的一些配置。沒什么意思
models.py 數(shù)據(jù)模塊 (ORM)
test.py 自動化測試,測試腳本
views.py 執(zhí)行響應(yīng)的邏輯代碼(重要)

3.3修改端口號

python manage.py runserver 9090
image.png
3,3.開啟服務(wù):

CMD窗口下該目錄下 python manage.py runserver
image.png

此時可以在瀏覽器打開改地址。顯示正確就說明成功了。
==================
創(chuàng)建第一個界面:
UR分發(fā),都要傳遞一個request對象,
在views.py中編輯

from  django.http import HttpResponse
def index(request):
    return HttpResponse("Hello world").

Urls配置的優(yōu)化,由于項目越來越大。在blog 應(yīng)用中創(chuàng)建urls 配置url后綴
image.png
提示,新版的django,在url中不用r這些正則
image.png

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


image.png

這樣子整個請求地址為
image.png
3.3模板的創(chuàng)建,什么是template

HTML文件,模板語言 DTL

3.4創(chuàng)建模板

1.在APP 的根目錄下,即blog下創(chuàng)建 templates的目錄
在該目錄下創(chuàng)建HTML代碼,index.html文件
在views.py中返回一個render()
render(reuest,"*.html",字典)
該字典是后臺傳遞到模板的參數(shù),鍵為參數(shù)名

在模板中使用{{參數(shù)名}}來直接使用
image.png
def login(request):
    return render(request, 'index.html', {"hello": "我是蒲小帥"})
在index.html中獲取
<h1>{{hello}}</h1>就能獲取到我是蒲小帥
****注意
Django按照InSTALLED_APPS的添加順序查找Templates,不同APP下Templates目錄下的同名.html會造成沖突

解決方法:
在templates目錄下創(chuàng)建于app目錄相同的文件夾,并將html文件放在其中。

3.5models介紹

在生成app應(yīng)用目錄時,自動為我們創(chuàng)建了models.py,并引入models

創(chuàng)建類,繼承models.Model。Python中數(shù)據(jù)表都是以類的形式產(chǎn)生。在APP目錄下的models.py里創(chuàng)建一個文章類,用于生成數(shù)據(jù)表。
image.png

有了model,把其生成為數(shù)據(jù)表
3.6生成數(shù)據(jù)表

1.python manage.py makemigrations app(名) 可選,不寫的話,該應(yīng)用所有的都生成數(shù)據(jù)遷移。
image.png

2.python manage.py migrate
image.png

3.查看sql的語句 python manage.py sqlmigrate blog 0001
image.png
關(guān)聯(lián)MySql數(shù)據(jù)庫

在setting.py中修改,前提是已經(jīng)創(chuàng)建了數(shù)據(jù)庫

image.png

過程中提示沒有數(shù)據(jù)庫驅(qū)動,就要到虛擬環(huán)境中安裝。
image.png

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

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

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

常用數(shù)據(jù)類型

models.ForeignKey
models.DateField
models.IntegerField
models.IPAddressField
models.FileField
models.ImageField


image.png

image.png
創(chuàng)建超級賬戶

createsuperuser


image.png
xadmin

比admin界面更友好
推薦github上下載源碼,使用django2分支,解壓復(fù)制xadmin目錄到app同級目錄下??赡苡邢嚓P(guān)內(nèi)容沒導(dǎo)入,用pycharm自行導(dǎo)入解壓。
在setting.py中添加

INSTALLED_APPS = [
    # 'django.contrib.admin',
    'xadmin',
    'crispy_forms',注意這里有個逗號
]
導(dǎo)入 xadmin
,url中設(shè)置xamin

xadmin安裝

image.png

xadmin一些配置

1.配置主題,在user.admin中設(shè)置

class BaseSeting(object):
    enable_themes=True
    use_bootswatch=True
xadmin.site.register(views.BaseAdminView,BaseSeting)
必寫在最后注冊不能寫在第一位。不然估計初始化錯誤。
class GlobalSettings(object):
    site_title="后臺管理系統(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下寫 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)
image.png

帶?/?name就需要用get

def hi(request):
    name=request.GET.get("name")
    return HttpResponse("你好,"+name)
...
path('hi/',views.hi)
image.png

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

image.png

比如 在redirect('/cms/'),需要改變的時候,需要改很多地方,那么我們就給他取個名字,就算地址變了,名字沒變。

第一步:path('hi/',views.hi,name="login")
第二步: from  django.shortcuts import redirect,reverse
redirect(reverse('login'))
命名空間

cms,front中的urls的path的名稱name都一樣,重復(fù)了,那么在views中就不知道找誰。在多個app之間,可能產(chǎn)生同名的url,反轉(zhuǎn)就會混淆

在各自的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’,查找路徑,是個列表可設(shè)置多個,
‘APP_DIRS’=true,如果在DIRS下沒找到,優(yōu)先在當(dāng)前app中尋找,找不到會在安裝了的app中看有沒有teamplates。(INSTALLED_APPS下,添加‘a(chǎn)pp’)

模板變量,語法,if,for

DTL常用過濾

add 把數(shù)據(jù)轉(zhuǎn)成int,在跟value進行相加
{{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)文件

image.png
 'builtins':['django.templatetags.static']
#不與app下的static相關(guān)
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')
]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容