1. 程式人生 > >1Python全棧之路系列之Django初體驗

1Python全棧之路系列之Django初體驗

編寫程序 online 網絡開發 程序員 堪薩斯

Python全棧之路系列之Django初體驗


Django不得不說在Python中是一個非常強大的全棧框架,而且入門也比較簡單,只要你學完了基本的Django知識,接著再做一兩個項目,不大不小就成,然後你再去學其它的框架你會發現,在那些小而美的框架中,你學起來將非常的快,因為你在學習Django的時候就已經學習並且體驗過了Web開發流程,所以會有這麽一個現象出現,有些新手朋友在學習FlaskTornado等小而美的框架時,很多概念不是很理解,比如ORM路由等,但你學Django就不會出現這種問題。


Django的歷史

Django是從真實世界的應用中成長起來的,它是由堪薩斯(Kansas)州 Lawrence

城中的一個網絡開發小組編寫的。 它誕生於2003 年秋天,那時Lawrence Journal-World報紙的程序員Adrian HolovatySimon Willison開始用Python來編寫程序。

當時他們的World Online小組制作並維護當地的幾個新聞站點, 並在以新聞界特有的快節奏開發環境中逐漸發展。這些站點包括有LJWorld.comLawrence.comKUsports.com, 記者(或管理層) 要求增加的特征或整個程序都能在計劃時間內快速的被建立,這些時間通常只有幾天或幾個小時。因此,AdrianSimon 開發了一種節省時間的網絡程序開發框架,這是在截止時間前能完成程序的唯一途徑。

2005年的夏天,當這個框架開發完成時,它已經用來制作了很多個World Online的站點。當時World Online小組中的Jacob Kaplan-Moss 決定把這個框架發布為一個開源軟件。

從今往後數年,Django是一個有著數以萬計的用戶和貢獻者,在世界廣泛傳播的完善開源項目。原來的World Online的兩個開發者(Adrian and Jacob)仍然掌握著Django,但是其發展方向受社區團隊的影響更大。

摘錄自djangobook3

Django訪問流程

在學習Django之前讓我們先來了解下Django的訪問流程把,這是很重要的,便於你理解Django整個的工作流程是怎樣的,當然我也把圖畫好了,如下圖所示:

技術分享

解釋下上面的圖是如何工作的,先來擬這樣一個環境,你打開了QQ空間,但是在你沒有輸入QQ賬號和密碼的情況下是不可以直接訪問你的空間的,此時你需要輸入賬號密碼才可以進入,假設你賬號密碼輸出正確,自然而然的就進入了QQ空間,就以這個例子來描述上圖的流程把:

  1. 用戶打開了Google瀏覽器,輸入QQ空間的URL,但是當前沒有登錄,需要輸入賬號密碼,現在輸入賬號密碼了,然後點擊登錄;

  2. 點擊登錄的這個請求首先會進入Django的路由系統(在路由前面其實還有中間件),代表你要訪問哪一個資源,然後請求就被傳給了對應路由的函數;

  3. 這個時候函數接到了用戶傳過來的賬號密碼,去數據庫中(model,信號可以實現在數據庫之前之後做些操作)做匹配;

  4. 當前用戶名和密碼正確,然後視圖就會渲染頁面;

  5. 把頁面返回給瀏覽器,此時用戶就進入了自己的QQ空間

安裝Python

Django本身是純Python編寫的,所以安裝框架的第一步是確保你已經安裝了python2.x或者python3.x,你可以在https://www.python.org/downloads/這下載並安裝python。

我這裏已經安裝好了Python3.x

$ python3 -V
Python 3.5.2

安裝

目前我的操作系統是Mac並且已經配置安裝好了pip3python3,我們可以直接使用pip來進行安裝:

# 默認安裝最近穩定版本
pip3 install django

指定安裝django版本,這個知識雖然不是django內的,但還是要說一下

# 指定安裝1.9版本
pip install django==1.9

目前最新穩定的版本是1.10,你可以進入Python解釋器導入django模塊來進行校驗是否正確安裝

>>> import django

如果在導入的時候沒有報錯就表示已經安裝成功,否則你可以需要重新安裝.

# 導入django
>>> import django
# 查看目前版本號
>>> django.get_version()
‘1.10.5‘

創建一個Django項目

django為我們提供了一個django-admin的指令,以方便與我們在命令行下創建django項目,可以使用django-admin --help查看該指令的幫助信息,當然如果你想這麽做。

現在我們來看一下比較常用的一個參數把,這些參數都是通過django-admin --help得到的。

參數描述
startproject創建一個完整的項目
startapp創建一個app
runserver運行django為我們提供的http服務
shell進入待django環境的shell
makemigrations生成數據庫命令
migrate執行生成好的數據庫命令

然後讓我們使用startproject來創建一個項目吧

$ django-admin startproject ansheng
$ cd ansheng/
$ ls
ansheng        manage.py

manage.py文件是一種命令行工具,允許你以多種方式與該Django項目進行交互,輸入python manage.py help可以看到他為我們提供了那些指定,比如如下命令都是常用的:

指定描述
createsuperuser創建一個django後臺的超級管理員
changepassword修改超級管理員的密碼

貌似這兩個也是最常用的,還有一個參數和上面django-admin --help是一樣的, 請自行比較測試。

ansheng/settings.py該項目的全局配置文件,很重要。

ansheng/urls.py項目的路由配置文件,這是一個django項目的主入口文件。

還有一些其他不重要的文件就不做闡述了。

讓Django項目運行起來

django內部是有一個內建的輕量的web開發服務器,在開發期間你完全可以使用內建的或者,從而免去了安裝配置nginx或者apache等。

如果你還沒啟動服務器,請切換到你的項目目錄裏,運行下面的命令:

$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate‘ to apply them.
August 08, 2016 - 11:29:42
Django version 1.10, using settings ‘mysite.settings‘
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

這將會在端口8000啟動一個本地服務器, 並且只能從你的這臺電腦連接和訪問。 既然服務器已經運行起來了,現在用網頁瀏覽器訪問http://127.0.0.1:8000/。 你應該可以看到一個令人賞心悅目的淡藍色Django歡迎頁面。

技術分享

更改這個Development Server的主機地址或端口

默認情況下,runserver命令在8000端口啟動開發服務器,且僅監聽本地連接。 要想要更改服務器端口的話,可將端口作為命令行參數傳入:

python manage.py runserver 8080

通過指定一個IP地址,你可以告訴服務器–允許非本地連接訪問。 如果你想和其他開發人員共享同一開發站點的話,該功能特別有用。0.0.0.0這個IP地址,告訴服務器去偵聽任意的網絡接口。

python manage.py runserver 0.0.0.0:8000

完成這些設置後,你本地網絡中的其它計算機就可以在瀏覽器中訪問你的IP地址了。比如:http://192.168.1.103:8000/

實例

這個例子中我們會涉及到django的多方面知識,比如後面幾章會學習到的路由視圖模型模板後臺管理等知識點。

那麽這是個什麽例子呢?其實是一個很簡單的例子,怎麽個簡單法兒,後臺添加用戶,前臺展示用戶,很簡單吧,那我們接下來就來實操吧。

繼上面創建好的項目ansheng之上我們在創建一個appusers:

$ python manage.py startapp users

初次之外我們還需要把app註冊到我們的項目中,可以在ansheng/settings.py中找到INSTALLED_APPS字典,把剛創建的APP名字添加進去:

INSTALLED_APPS = [
    ......
    ‘users‘,
]

因為需要用到html,所以我們也需要配置模板路徑文件了,先創建一個存放模板文件的路徑

$ mkdir templates

繼續編輯settings.py,找到TEMPLATES,把DIRS修改如下:

‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)],

ansheng/urls.py中添加一條路由配置:

from django.conf.urls import url
from django.contrib import admin

# 導入app下面的視圖函數users
from users.views import users

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    # 指定路由對應的函數
    url(r‘^users/$‘, users),
]

users/views.py視圖函數內容如下:

from django.shortcuts import render

# 導入模型中的UserInfo表
from .models import UserInfo

# Create your views here.

def users(request):
    # 獲取所有的用戶
    all_user = UserInfo.objects.all()
    # 把用戶信息和前端文件一起發送到瀏覽器
    return render(request, ‘users.html‘, {‘all_user‘: all_user})

template/users.html內容如下

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

<ul>
    <!-- 循環傳過來的所有用戶,顯示其用戶名 -->
    {% for user in all_user %}
        <li>{{ user.name }}</li>
    {% endfor %}
</ul>

</body>
</html>

users/models.py配置文件

from django.db import models

__all__ = [
    ‘UserInfo‘
]

# Create your models here.

class UserInfo(models.Model):
    name = models.CharField(max_length=30, verbose_name=‘用戶名‘)
    email = models.EmailField(verbose_name=‘用戶郵箱‘)

users/admin.py配置文件

from django.contrib import admin
from .models import *

# Register your models here.

# 把UserInfo註冊到admin中
admin.site.register(UserInfo)

最後我們生成數據庫:

$ python manage.py makemigrations
$ python manage.py migrate

創建超級管理員用戶

$ python manage.py createsuperuser
# 用戶名
Username (leave blank to use ‘ansheng‘): ansheng
# 喲箱地址,可以為空
Email address: 
# 密碼
Password: 
# 確認密碼
Password (again): 
Superuser created successfully.

打開http://127.0.0.1:8000/admin/登錄後臺,輸入我們剛才創建好的用戶和密碼

技術分享

找到我們剛才添加的app,然後點擊ADD添加一個或多個用戶:

技術分享

繼續打開http://127.0.0.1:8000/users/就能夠看到剛才添加的用戶了,你可以試著再添加一個用戶然後刷新頁面,看看是否會顯示出來你剛剛新添加的用戶,完。

#Python全棧之路 #Django


1Python全棧之路系列之Django初體驗