Web开发-Django初识及实战
企業(yè)級開發(fā)框架-Django
簡介
Django于2003年誕生于美國Kansas州,最初用來制作在線新聞Web站點,于2005年加入BSD許可證家族,成為開源網(wǎng)絡(luò)框架。根據(jù)比利時的爵士樂音樂家Django Reinhardt命名,作者這樣命名Django意味著Django能優(yōu)雅地演奏(開發(fā))功能豐富的樂曲(Web應(yīng)用)。
特點
相對于Python的其他Web框架,Django的功能是最完整的,業(yè)內(nèi)認(rèn)為就是“全”。它定義了服務(wù)發(fā)布、路由映射、模板編程、數(shù)據(jù)處理的一整套功能。這也意味著Django模板之間緊密耦合,開發(fā)者需要學(xué)習(xí)Django自己定義的一整套技術(shù)。
- 完善的文檔:10多年的發(fā)展,在線文檔十分完善。中文文檔地址。
- 集成數(shù)據(jù)訪問組件:Django的Model層自帶數(shù)據(jù)庫ORM組件,使開發(fā)者無需學(xué)習(xí)其他數(shù)據(jù)庫訪問技術(shù)(如DBI、SQLAlchemy等)。
- 強大的URL映射技術(shù):使用正則表達式管理URL映射,靈活性極高。
- 后臺管理系統(tǒng)自動生成:開發(fā)者只需要通過簡單的幾行配置和代碼就可以實現(xiàn)完整的后臺數(shù)據(jù)管理Web控制臺。
- 錯誤信息非常完整:在開發(fā)調(diào)試過程中如果出現(xiàn)運行異常,則Django可以提供非常完整的錯誤信息幫助開發(fā)者定位問題,比如缺少xxx組件的配置引用等,可以使開發(fā)者迅速調(diào)整錯誤。
組成結(jié)構(gòu)
- 管理工具(Management):一套內(nèi)置的創(chuàng)建站點、遷移數(shù)據(jù)、維護靜態(tài)文件的命令工具。
- 模型(Model):提供數(shù)據(jù)訪問接口和模塊,包括數(shù)據(jù)字段、元數(shù)據(jù)、數(shù)據(jù)關(guān)系等的定義和操作。
- 視圖(View):Django的視圖層封裝了HTTPRequest和Response的一系列操作和數(shù)據(jù)流,其功能主要是URL映射機制、綁定模板等。
- 模板(Template):是一套Django自己的頁面渲染模板語言,用若干內(nèi)置的tags和filters定義頁面的生成方式。
- 表單(Form):通過內(nèi)置的數(shù)據(jù)類型和控件生成HTML表單。
- 管理站(Admin):通過聲明需要管理的Model,快速生成后臺數(shù)據(jù)管理網(wǎng)站。
建站流程
安裝
建議在虛擬環(huán)境下使用pip安裝,pip install django==1.9.2。
建立項目(會生成項目目錄和默認(rèn)子文件)
執(zhí)行django-admin startproject djangosite,生成目錄如下。
默認(rèn)生成的幾個文件都非常重要,在今后的開發(fā)中要一直使用和維護它們。
- manage.py:是Django用于管理本項目的命令行工具,之后進行站點運行、數(shù)據(jù)庫自動生成、靜態(tài)文件收集等都要通過該文件完成。
- 內(nèi)層djangosite/目錄中包含本項目的實際文件,同時因為包含__init__.py,所以又是一個Python包。
- djangosite/init.py:告訴Python該目錄是一個Python包,暫無內(nèi)容。
- djangosite/settings.py:Django的項目配置文件。默認(rèn)時,在其中定義了本項目引用的Django組件、Django項目名等。在之后的開發(fā)中,還需要在其中配置數(shù)據(jù)庫參數(shù)、導(dǎo)入其他的Python包等信息。
- djangosite/urls.py:維護項目的URL路由映射,即定義客戶端訪問的URL由哪一個Python模塊解釋并提供反饋。默認(rèn)情況下,其中只定義了/admin即管理員站點的解釋器。
- djangosite/wsgi.py:定義WSGI的接口信息,用于與其他Web服務(wù)器集成,一般本文件生成后不做改動。
建立應(yīng)用
執(zhí)行命令python manage.py startapp app生成文件如下。
默認(rèn)生成了一些關(guān)鍵文件。
- init.py:其中暫無內(nèi)容,使得該app成為一個Python包。
- admin.py:管理站點模型的聲明文件,默認(rèn)為空。
- apps.py:應(yīng)用信息定義文件。在其中生成了類AppConfig,該類用于定義應(yīng)用名等Meta數(shù)據(jù)。
- migrations包:用于在之后定義引用遷移功能。
- models.py:添加模型層數(shù)據(jù)類的文件。
- tests.py:測試代碼文件。
- views.py:定義URL響應(yīng)函數(shù)。
基本視圖
在完成Django項目和應(yīng)用的建立后,即可開始編寫網(wǎng)站的應(yīng)用代碼,這里簡單顯示一個反饋來演示路由功能。
通過在djangosite/app/views.py中建立路由響應(yīng)函數(shù)。
from django.http import HttpResponsedef welcome(request):return HttpResponse("<h1>Welcome to my site.</h1>")接下來,通過URL映射將用戶的HTTP訪問與該函數(shù)綁定起來。在djangosite/app目錄下新建urls.py,管理該app中的所有URL映射,其文件內(nèi)容如下。
from django.conf.urls import url from . import viewsurlpatterns = [url(r'', views.welcome), ]在項目urls.py的urlpatterns中加一項,聲明對app中urls.py文件的引用。
from django.conf.urls import url, include from django.contrib import adminurlpatterns = [url(r'^admin/', admin.site.urls),url(r'app/', include('app.urls')), ]內(nèi)置Web服務(wù)器
啟動Web服務(wù)器(命令行下)
python manage.py runserver 0.0.0.0:8000
其中,runserver是啟動網(wǎng)站關(guān)鍵字,后面參數(shù)為網(wǎng)站綁定的IP地址和端口號,用0.0.0.0表示綁定本機所有IP。在運行過程中將一直占用控制臺,Ctrl+C退出。
注意:這種方式啟動的是Django內(nèi)置的Web服務(wù)器,由于性能原因,一般只用于開發(fā)人員測試,正式運行的網(wǎng)站需要使用WSGI方式啟動(后面介紹)。
總結(jié)
訪問效果如下
到此,一個簡單的站點建立了,麻雀雖小,五臟俱全,這個小站點以及包含了Django建站的一些基本東西。
項目實戰(zhàn)
模型類使用
配置項目INSTALLED_APPS
在django項目的settings.py文件中告訴Django需要安裝應(yīng)用app中的模型,在INSTALLED_APPS列表中添加一行如下。
'app.apps.AppConfig'
模型定義
打開djangosite/app/models.py,在其中新建一個模型類Moment用來定義信息發(fā)布表。
from django.db import modelsclass Moment(models.Model):content = models.CharField(max_length=200)user_name = models.CharField(max_length=20)kind = models.CharField(max_length=20)生成數(shù)據(jù)遷移文件
這里指的是將models.py定義的數(shù)據(jù)表轉(zhuǎn)換為數(shù)據(jù)庫生成腳本的過程。通過執(zhí)行python manage.py makemigrations app即可,此時migrations文件夾下多了文件,這是數(shù)據(jù)庫生成的中間文件,后面所有數(shù)據(jù)庫改動(也就是models.py文件改動)都會生成在這個目錄下。
移植到數(shù)據(jù)庫
模型修改可以通過makemigrations生成中間移植文件,要讓中間移植文件生效、修改真實數(shù)據(jù)庫,通過migrate命令實現(xiàn)。執(zhí)行python manage.py migrate即可,不修改數(shù)據(jù)庫參數(shù),默認(rèn)使用sqlite。利用sqlite可視化工具查看數(shù)據(jù)庫,確實生成了該表,其余的是Django需要的一些默認(rèn)表。
表單視圖使用
定義表單類
建立表單類文件djangosite/app/forms.py,在其中定義表單類MomentForm。
from django.forms import ModelForm from app.models import Momentclass MomentForm(ModelForm):class Meta:model = Momentfields = '__all__'修改模型類
from django.db import modelsKIND_CHOICES = (('Python技術(shù)', 'Python技術(shù)'),('數(shù)據(jù)庫技術(shù)', '數(shù)據(jù)庫技術(shù)'),('其他', '其他'), )class Moment(models.Model):content = models.CharField(max_length=200)user_name = models.CharField(max_length=20)kind = models.CharField(max_length=20, choices=KIND_CHOICES, default=KIND_CHOICES[0])開發(fā)模板文件
新建目錄djangosite/app/templates,在其中新建moments_input.html文件,效果如下。
開發(fā)視圖
編寫視圖函數(shù),使得表單類和頁面模板銜接起來。在app/views.py編寫代碼如下。
from django.http import HttpResponse import os from app.forms import MomentForm from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.shortcuts import renderdef welcome(request):return HttpResponse("<h1>Welcome to my site.</h1>")def moments_input(request):if request.method == 'POST':form = MomentForm(request.POST)if form.is_valid():moment = form.save()moment.save()return HttpResponseRedirect(reverse("app.views.welcome"))else:form = MomentForm()PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))return render(request, os.path.join(PROJECT_ROOT, 'templates', 'moments_input.html'), {'form': form})使用管理界面
Django管理界面是一個通過簡單配置就可以實現(xiàn)的數(shù)據(jù)模型后臺的Web控制臺。管理界面通常是給系統(tǒng)管理員使用的,以完成元數(shù)據(jù)的輸入、刪除、查詢等工作。
首先將管理界面需要管理的模型添加到djangosite/app/admin.py文件中。
from django.contrib import admin from .models import Momentadmin.site.register(Moment)在第一次訪問管理界面之前需要創(chuàng)建管理員賬戶,使用manage.py的createsuperuser建立。
之后可以通過http://127.0.0.1:8000/admin輸入管理員信息后登陸。
補充說明
到此,初步了解了Django的一些構(gòu)成,和網(wǎng)站搭建的基本步驟。本項目參考書為《Python高效開發(fā)實戰(zhàn)》劉長龍著, 使用到的所有重要包會列在requirements.txt文件中列出,具體代碼可以查看我的GitHub,歡迎star或者fork
總結(jié)
以上是生活随笔為你收集整理的Web开发-Django初识及实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分析与挖掘实战-基于基站定位数据的商
- 下一篇: 安卓进阶系列-08异步加载AsynsTa