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