2、Django_創(chuàng)建第一個應(yīng)用

Django的特點(diǎn)
  • 優(yōu)點(diǎn)
    python語言锄列、代碼干凈、整潔
    提供管理后臺惯悠,可以快速開發(fā)
    復(fù)用度高邻邮,設(shè)計和使用上遵循DRY原則
    易于擴(kuò)展復(fù)用的中間件
    內(nèi)置安全框架
    豐富的第三方類庫
  • 缺點(diǎn)
    單體應(yīng)用 - 不易并行開發(fā),單點(diǎn)擴(kuò)展
    不適合非常小的幾行代碼的項(xiàng)目
    不適用于高并發(fā)的to C 項(xiàng)目
一克婶、安裝
  • 官網(wǎng)下載安裝包
    https://media.djangoproject.com/releases/2.2/Django-2.2.5.tar.gz筒严;沒用過,接下來的步驟自行百度
  • pip下載
    1.命令:pip isntall Django
    2.坑位:
    出現(xiàn)WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
    解決方法:使用pip install 【需要下載的東西】-i http://pypi.douban.com/simple --trusted-host pypi.douban.com進(jìn)行安裝
二鸠补、創(chuàng)建項(xiàng)目和運(yùn)行
  • 命令行
    1.創(chuàng)建項(xiàng)目
django -admin startproject 項(xiàng)目名

2.運(yùn)行項(xiàng)目

$ python manage.py runserver
$ python manage.py runserver ip:端口
  • Pycharm

    1.創(chuàng)建項(xiàng)目:
    create
  • 坑位
    出現(xiàn)Make sure that you use the Django version of 'pip' installed for your Python interpreter
    解決方法:切換到提示框所說的路徑下萝风,然后運(yùn)行pip install Django -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
    然后再點(diǎn)擊提示框的按鈕
    結(jié)果:
    創(chuàng)建成功

2.運(yùn)行項(xiàng)目:
運(yùn)行成功

3.訪問localhost:8000:
訪問
三、語言和時間改成中文

修改settings.py文件:

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

結(jié)果:
中文
四紫岩、目錄結(jié)構(gòu)和介紹
目錄結(jié)構(gòu)
  • 最外層的Django_Test
    是項(xiàng)目的容器规惰,Django并不關(guān)心它的名稱,可以將它任意命名
  • manage.py
    可以讓使用者使用各種方式管理Django項(xiàng)目的命令行工具泉蝌。詳情看:manage
  • 里面一層的Django_Test
    包含了項(xiàng)目歇万,它是一個純Python包。它的名字就是當(dāng)前Django項(xiàng)目的名字勋陪,我們引用它內(nèi)部任何東西時贪磺,使用的就是這個名字
  • Django_Test/__init__.py:Python基礎(chǔ)的知識;一個空文件诅愚,用于告訴Python當(dāng)前目錄應(yīng)該是一個Python包
  • Django_Test/settings.py:Django項(xiàng)目的配置文件寒锚。詳情看:Django settings
  • Django_Test/urls.py:Django項(xiàng)目的URL聲明,就好比網(wǎng)站的目錄违孝,注明了哪個url對應(yīng)什么內(nèi)容(頁面)刹前。詳情看:URL調(diào)度器
  • Django_Test/wsgi.py:作為Django項(xiàng)目運(yùn)行在WSGI兼容的web服務(wù)器上的入口,詳情看:如何使用WSGI進(jìn)行部署
  • Django_Test/view.py:自己創(chuàng)建的雌桑,MVT中的V:接收請求喇喉,邏輯處理,返回結(jié)果
  • templates:模板校坑,放置返回給瀏覽器的html文件
五拣技、創(chuàng)建應(yīng)用

在Django中千诬,每個應(yīng)用對應(yīng)一個Python包,并且遵循同樣的約定膏斤。Django自帶一個工具徐绑,可以幫助我們自動生成Django應(yīng)用的基礎(chǔ)目錄結(jié)構(gòu),十分方便掸绞。

  • 項(xiàng)目和應(yīng)用的區(qū)別
    應(yīng)用:是一個專門做某件事情的網(wǎng)站應(yīng)用程序泵三,比如博客系統(tǒng),或者公共記錄的數(shù)據(jù)庫衔掸,或者簡單的投票程序烫幕。
    項(xiàng)目:是一個網(wǎng)站使用的配置和應(yīng)用的集合。項(xiàng)目可以包含很多個應(yīng)用敞映。應(yīng)用可以被很多個項(xiàng)目使用较曼。

  • 現(xiàn)在要創(chuàng)建的應(yīng)用,會創(chuàng)建在和Django_Test/Django_Test同級的目錄振愿,這樣子它就可以作為頂級模塊導(dǎo)入捷犹,而不是Django_Test的子模塊
    1.先來到manage.py所處的目錄下,然后執(zhí)行命令:python manage.py startapp polls
    2.創(chuàng)建成功的polls應(yīng)用:

    polls

    3.注冊應(yīng)用
    Django_Test/Django_Test/settings.py文件注冊新增的應(yīng)用polls

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # 注冊子應(yīng)用
    'polls.apps.PollsConfig'  # 大部分情況簡寫成'polls'
]

4.編寫第一個視圖
polls/views.py(管理視圖冕末,好比URL對應(yīng)的內(nèi)容)
這里添加視圖函數(shù)
1.第一個參數(shù)requestsHttpRquest對象萍歉,包含前端用戶的所有請求信息。
2.返回值必須是一個HttpResponse對象或者子對象

# 新增如下代碼
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse


def index(request):
    return HttpResponse("hello, django.  You're at the polls index.")


def login(request):
    # 可以通過request對象拿到請求的所有數(shù)據(jù)
    if request.method == 'GET':  # 大寫
        return HttpResponse(" You're at the polls login.GET請求")
    elif request.method == 'POST':
        return HttpResponse(" You're at the polls login.POST請求")
    else:
        return HttpResponse(" You're at the polls login.其它請求")

5.編寫“目錄”
一個view創(chuàng)建后档桃,如果想要起到效果枪孩,我們需要創(chuàng)建一個url去映射到這個視圖。所以此時我們需要在該polls應(yīng)用目錄下創(chuàng)建一個url聲明文件urls.py
5.1.urls.py
PS.實(shí)際上藻肄,一個項(xiàng)目往往會有多個app蔑舞,那么Django是如何區(qū)分這些app的urlname的呢?這時候可以使用URL conf的命名空間嘹屯。也就是在各個app的urls.py文件的開頭攻询,添加上一個app_name變量來指定該app的命名空間

from django.urls import path

from . import views

## 指定當(dāng)前應(yīng)用的命名空間
app_name = 'polls'

urlpatterns = [
    # url路徑,所映射的view方法州弟,對應(yīng)的名稱
    path(r'', views.index, name="index"),
    # 注意不需要/
    path(r'login', views.login, name="login"),
]

6.在項(xiàng)目中綁定應(yīng)用
應(yīng)用的內(nèi)容創(chuàng)建完畢钧栖,接下來就需要到項(xiàng)目根目錄的urls.py文件中去綁定所創(chuàng)建的應(yīng)用的polls.urls模塊
Django_Test/Django_Test/urls.py:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    //  host后面的第一級路徑、所映射應(yīng)用的所有url都在該一級路徑下
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls) # 進(jìn)入localhost:8000/admin會進(jìn)入Django的admin管理頁面
]
  • include()路由轉(zhuǎn)發(fā)
    允許引用其它 URLconfs婆翔。每當(dāng) Django 遇到 :func:~django.urls.include 時桐经,它會截斷與此項(xiàng)匹配的 URL 的部分,并將剩余的字符串發(fā)送到 URLconf 以供進(jìn)一步處理浙滤。它的設(shè)計理念是即插即用,因?yàn)橐粋€應(yīng)用會有多個url和view气堕,所以希望使用include()配置了一條以后纺腊,就能夠訪問該應(yīng)用下的所有的路徑畔咧,比如說"/polls/"、"/polls/login"
    什么時候使用include()揖膜?
    除了admin.site.urls以外誓沸,匹配其它url時都應(yīng)該使用include()

還可以這樣靈活使用include()進(jìn)行路由轉(zhuǎn)發(fā)

### 原來的路由配置
from django.urls import path
from . import views

urlpatterns = [
    path('<page_slug>-<page_id>/history/', views.history),
    path('<page_slug>-<page_id>/edit/', views.edit),
    path('<page_slug>-<page_id>/discuss/', views.discuss),
    path('<page_slug>-<page_id>/permissions/', views.permissions),
]

### 優(yōu)化后
urlpatterns = [
    path('<page_slug>-<page_id>/', include([
        path('history/', views.history),
        path('edit/', views.edit),
        path('discuss/', views.discuss),
        path('permissions/', views.permissions),
    ])),
]

7.訪問
http://127.0.0.1:8000/polls/

polls/

http://127.0.0.1:8000/polls/login

polls/login,get請求

六壹粟、path函數(shù)
  • path()有四個參數(shù)拜隧,其中兩個必填參數(shù):routeview,兩個選填參數(shù)kwargsname
    1.route:是一個匹配 URL 的準(zhǔn)則(類似正則表達(dá)式)趁仙。當(dāng) Django 響應(yīng)一個請求時洪添,它會從 urlpatterns 的第一項(xiàng)開始,按順序依次匹配列表中的項(xiàng)雀费,直到找到匹配的項(xiàng)干奢。這些準(zhǔn)則不會匹配 GET 和 POST 參數(shù)或域名。例如盏袄,URLconf 在處理請求https://www.example.com/myapp/ 時忿峻,它會嘗試匹配 myapp/ 。處理請求 https://www.example.com/myapp/?page=3 時辕羽,也只會嘗試匹配 myapp/逛尚。
    2.view:當(dāng) Django 找到了一個匹配的準(zhǔn)則,就會調(diào)用這個特定的視圖函數(shù)刁愿,并傳入一個 HttpRequest 對象作為第一個參數(shù)绰寞,被“捕獲”的參數(shù)以關(guān)鍵字參數(shù)的形式傳入。
    3.kwargs:任意個關(guān)鍵字參數(shù)可以作為一個字典傳遞給目標(biāo)視圖函數(shù)酌毡。
    4.name:給URL 取名能使我們在 Django 的任意地方唯一地引用它克握,尤其是在模板中。這個有用的特性允許我們只改一個文件就能全局地修改某個 URL 模式枷踏。
    5.path函數(shù)官方文檔
七菩暗、類視圖
  • 類視圖的優(yōu)點(diǎn):
    1.代碼可讀性好
    2.類視圖相對于函數(shù)視圖有更高的復(fù)用性,其它類可以通過繼承該視圖類就可以使用它的方法
  • 例子:(把上面例子中的index修改成類視圖)
    1./polls/views.py
from django.http import HttpResponse

from django.views import View


class Index(View):
    """
    類視圖旭蠕,需繼承View類
    """

    def get(self, request):
        return HttpResponse("hello, django.  You're at the polls index.==>GET")

    def post(self, request):
        return HttpResponse("hello, django.  You're at the polls index.==>POST")

2.polls/urs.py

from django.urls import path

from . import views

urlpatterns = [
    # 匹配類視圖
    path(r'', views.Index.as_view(), name='index')
]

結(jié)果:
類視圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末停团,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掏熬,更是在濱河造成了極大的恐慌佑稠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旗芬,死亡現(xiàn)場離奇詭異舌胶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疮丛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門幔嫂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辆它,“玉大人,你說我怎么就攤上這事履恩∶誊裕” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵切心,是天一觀的道長飒筑。 經(jīng)常有香客問我,道長绽昏,這世上最難降的妖魔是什么协屡? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮而涉,結(jié)果婚禮上著瓶,老公的妹妹穿的比我還像新娘。我一直安慰自己啼县,他們只是感情好材原,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著季眷,像睡著了一般余蟹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上子刮,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天威酒,我揣著相機(jī)與錄音,去河邊找鬼挺峡。 笑死葵孤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的橱赠。 我是一名探鬼主播尤仍,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狭姨!你這毒婦竟也來了宰啦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤饼拍,失蹤者是張志新(化名)和其女友劉穎赡模,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體师抄,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漓柑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欺缘。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡栋豫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谚殊,到底是詐尸還是另有隱情,我是刑警寧澤蛤铜,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布嫩絮,位于F島的核電站,受9級特大地震影響围肥,放射性物質(zhì)發(fā)生泄漏剿干。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一穆刻、第九天 我趴在偏房一處隱蔽的房頂上張望置尔。 院中可真熱鬧,春花似錦氢伟、人聲如沸榜轿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谬盐。三九已至,卻和暖如春诚些,著一層夾襖步出監(jiān)牢的瞬間飞傀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工诬烹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砸烦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓绞吁,卻偏偏與公主長得像幢痘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掀泳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容