溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

都說Djnago框架重,那就讓哥用15行代碼寫個django web程序!

發(fā)布時間:2020-07-21 23:53:50 來源:網(wǎng)絡(luò) 閱讀:8697 作者:alex3714 欄目:開發(fā)技術(shù)

很多初學(xué)django的小伙伴都會了解到,django是個大而全的網(wǎng)絡(luò)框架,本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。要學(xué)這么多內(nèi)容,要學(xué)到猴年馬月?。。?/span>

不過世界真是奇妙,現(xiàn)在咱們就在猴年馬月里!2016年是猴年,按農(nóng)歷計算,6月5日至7月3日是庚午月,正好是“猴年”里的“馬月”。那么問題來了:你想不想在猴年馬月里學(xué)會django呢?

下面我們嘗試一下,用15行代碼結(jié)合django寫個web程序,來一次django的清爽體驗。

都說Djnago框架重,那就讓哥用15行代碼寫個django web程序!

django復(fù)雜嗎

當(dāng)然,復(fù)雜的很呢?。?!如果你是跟著官方文檔自學(xué)過,就會知道,那里有個初級項目是投票網(wǎng)站,分了6部分才講完。而且如果你是個完完全全網(wǎng)絡(luò)編程的初學(xué)者,估計過了第3篇才看出個這個項目的樣子。而且在學(xué)習(xí)中,還需要了解django最重要的幾方面內(nèi)容:

比如目錄結(jié)構(gòu):

運(yùn)行django-admin startproject sitename后,你會看見sitename文件夾里的四個文件:

__init__.py
settings.py
urls.py
wsgi.py

再運(yùn)行python manage.py startapp app01后,還可以在app01這個app的目錄里看出來所謂的MTV架構(gòu)。

__init__.py
admin.py
models.py # M,定義各種數(shù)據(jù)類
templates  # T,這是個目錄,放html模板的,當(dāng)然你可以建到項目路徑下 
views.py     # V,根據(jù)路由編寫的響應(yīng)各種請求的函數(shù)
app.py
...

如果你用過pycharm,新建工程和app后的代碼結(jié)構(gòu)如圖所示,帥哥做的很好,直接用了。 都說Djnago框架重,那就讓哥用15行代碼寫個django web程序!

當(dāng)然,這些只是個初級認(rèn)識,后面還要學(xué)習(xí)urls處理各種路由,然后怎么定義數(shù)據(jù)庫,怎么前后端傳數(shù)據(jù),手續(xù)很復(fù)雜?。?/p>

但是,你看看人家flask,bottle,分分鐘就弄出個hello world?。×ⅠR就知道大致的框架用法了,django是不是也能這么玩呢?

清爽版本

巧了,國外早有django愛好者嘗試過django的簡單玩法,而且還專門寫了本書。今天就拋磚引玉,大家一起來玩玩!

talk is simple, show me the code!

# -*- coding:utf-8 -*-

# a mini Django project

import sys

from django.conf import settings
from django.conf.urls import url
from django.http import HttpResponse
from django.core.management import execute_from_command_line

settings.configure(
        DEBUG = True, # 調(diào)試狀態(tài)
        SECRET_KEY = 'iamasecretkeyhahahaha', # 默認(rèn)的session需要的key,也為了CSRF
        ROOT_URLCONF = sys.modules[__name__], # url根目錄的配置
    )

def home(request):
    return HttpResponse('a mini django website')  # 主頁

urlpatterns = [
        url(r'^$', home), # 元組類型,默認(rèn)請求發(fā)送到home函數(shù)
    ]

# 啟動程序
if __name__ == "__main__":
    execute_from_command_line(sys.argv)

新建個文件,比如miniWeb.py,寫上這些代碼,然后在當(dāng)前目錄下,命令行運(yùn)行:

>python miniWeb.py runserver

看到這些說明運(yùn)行成功!

System check identified no issues (0 silenced).
June 13, 2016 - 12:23:51
Django version 1.9.7, using settings None
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

然后用瀏覽器打開http://localhost:8000/, wow, look at that! a mini django website應(yīng)該已經(jīng)出現(xiàn)在你的瀏覽器里!

是不是太簡單了? 哈哈! 要的就是這種清爽感覺!爽不爽?不算注釋的話,也就15行吧。

簡單解釋一下:這些代碼其實(shí)就是把一個django標(biāo)配的settings,view,url,manage幾個文件進(jìn)行了簡化與整合,目的在于用最小的代碼向你展示django的網(wǎng)頁響應(yīng)過程。 實(shí)際也就是把django中的請求生命周期放在一個文件中展示了(我們這里還沒有涉及到model部分)。 都說Djnago框架重,那就讓哥用15行代碼寫個django web程序!

流程如下:

1.__name__這行在學(xué)習(xí)python的時候每天都會用到,就是一個入口函數(shù),在我們這里就是一個命令行的入口,通過命令行傳入runserver參數(shù),然后django內(nèi)部會自己處理;
2.然后我們打開http://localhost:8000/,這時候訪問的是網(wǎng)站的根目錄url,我們在urlpatterns里面,為這個指明了要跳轉(zhuǎn)的函數(shù),也就是home;
3.在home函數(shù)中,會通過Http響應(yīng),將頁面內(nèi)容返回給網(wǎng)頁前端;
4.于是,我們看到了頁面內(nèi)容a mini django website.

升級點(diǎn)的清爽版本

只有一行文字啊,這網(wǎng)站太low了!咱們給他加點(diǎn)鹽,弄個html模板好不好?

還是直接看代碼,關(guān)鍵地方我加了注釋:

# -*- coding:utf-8 -*-

# a mini Django project
import os  # 添加模板路徑使用
import sys

# 保存當(dāng)前路徑
BASE_PATH=  os.path.dirname(__file__)

from django.conf import settings
from django.conf.urls import url
# from django.http import HttpResponse # 不需要了
from django.shortcuts import render # 渲染模板,讓html中顯示后臺自定義內(nèi)容
from django.core.management import execute_from_command_line

settings.configure(
        DEBUG = True, # 調(diào)試狀態(tài)
        SECRET_KEY = 'iamasecretkeyhahahaha', # 默認(rèn)的session需要的key,也為了CSRF
        ROOT_URLCONF = sys.modules[__name__], # url根目錄的配置
        TEMPLATE_DIRS = (
                os.path.join(BASE_PATH, 'templates'), # 告訴django在當(dāng)前目錄下找templates文件夾,這里還是元組,記得逗號!
            ), # 這里記得有逗號,因為setting的配置也是元組
        INSTALLED_APPS = ( # 默認(rèn)的認(rèn)證和內(nèi)容的app,需要添加避免傳數(shù)據(jù)的錯誤
            'django.contrib.auth',  
            'django.contrib.contenttypes',
        ),
    )

def home(request):
    #return HttpResponse('a mini django website')  # 主頁
    data = {'name': 'alex', 'age':18} # 通過模板語言傳到頁面的數(shù)據(jù)
    print data
    return render(request, 'index.html', {'data': data})

urlpatterns = [
        url(r'^$', home, name='home'), # 元組類型,默認(rèn)請求發(fā)送到home函數(shù)
    ]

# 啟動程序
if __name__ == "__main__":
    execute_from_command_line(sys.argv)

比剛才多了些模板文件的內(nèi)容,這時候我們還需要在當(dāng)前目錄下新建一個文件夾,名字就是templates,然后在里面新建一個html文件,可以像我這個一樣,

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>mini django</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
</head>
<body>
<h2>顯示一下data:</h2>
    {{ data }}

    <h3>分開輸出:</h3>
    <li>name:`data`.`name`</li>
    <li>age:`data`.`age`</li>
</body>
</html>

注意里面用到了一點(diǎn)模板語言,用{{}}表示的,其實(shí)就是個上面render函數(shù)最后的參數(shù)替換而已。

也就是這句:

return render(request, 'index.html', {'data': data})

注意這里,為了和django默認(rèn)新建工程一致,我把當(dāng)前目錄名和py文件名字都改成一樣的了:miniDjango.

命令行運(yùn)行: >python miniDjango.py runserver

再次打開瀏覽器,訪問:http://localhost:8000/, wow, look at that!

顯示一下data:

{'age': 18, 'name': 'alex'}
分開輸出:

name:alex
age:18

是不是高大上了很多!

甚至,我們可以直接用Bootstrap的http://v3.bootcss.com/examples/jumbotron/這個模板測試一下。

首先保存這個網(wǎng)頁的源碼為bt.html文件,放到templates文件夾。

然后添加url和view函數(shù): 如下所示:

def bt(request):
    data = {'title': 'alex', 'headings':['我是標(biāo)題1', '我是標(biāo)題2','我是標(biāo)題3']} # 通過模板語言傳到頁面的數(shù)據(jù)
    return render(request, 'bt.html', {'data': data})

urlpatterns = [
        url(r'^$', home, name='home'), # 元組類型,默認(rèn)請求發(fā)送到home函數(shù)
        url(r'^bt/$', bt, name='bt'), # 元組類型,默認(rèn)請求發(fā)送到bt函數(shù)
    ]

然后訪問http://localhost:8000/bt/就可以看見效果了! 如下圖所示: 都說Djnago框架重,那就讓哥用15行代碼寫個django web程序!

繼續(xù)學(xué)習(xí)吧

如果說學(xué)習(xí)django像做一桌大餐,上面咱們討論的這點(diǎn)內(nèi)容頂多是做了個番茄炒蛋。想要學(xué)習(xí)更多,還需要好好的多加練習(xí),多和一起學(xué)習(xí)的小伙伴討論,最好再有個名師指點(diǎn)。

人生苦短,我用Python,加油吧,小伙伴們!

今天django的清爽體驗到這里就結(jié)束了。 歡迎留言一起討論交流!

參考

  • http://radar.oreilly.com/2014/04/simplifying-django.html

  • Lightweight Django [book]


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI