Python Django全面介紹
Django是一個非常強大的Python Web開發框架,它以"快速開發"和"干凈、實用的設計"為設計宗旨,本文將從Django的基本概念開始,逐漸引導大家理解如何使用Django構建復雜的web應用程式,
Django基本概念與原理
首先,讓我們從Django的核心組件開始講解,Django遵循MVC模型-視圖-控制器設計模式,并在Python中有一個特殊的表現形式,稱為MTV模型-模板-視圖,這是因為Django的控制器部分由框架自身內部處理,而開發者主要與模型、模板和視圖互動,
# 示例代碼:創建一個Django模型
from django.db import models
class Blog(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
def __str__(self):
return self.title
在上面的代碼中,我們定義了一個簡單的博客模型,包含標題和內容兩個欄位,其中,CharField和TextField都是Django提供的資料庫欄位型別,
Django的視圖與URL配置
在Django中,視圖是Python函式,用于接收Web請求并回傳Web回應,每個視圖函式都將一個HttpRequest物件作為引數,并回傳一個HttpResponse物件,視圖與Web應用程式的URLs關聯,這是通過URL配置完成的,
# 示例代碼:創建一個視圖
from django.http import HttpResponse
from .models import Blog
def blog_index(request):
blogs = Blog.objects.all()
output = ', '.join([blog.title for blog in blogs])
return HttpResponse(output)
# 示例代碼:URL配置
from django.urls import path
from . import views
urlpatterns = [
path('blogs/', views.blog_index, name='blog_index'),
]
上述代碼中,我們首先定義了一個視圖blog_index,該視圖從資料庫獲取所有的博客條目并顯示其標題,然后我們在URL配置中創建了一個新的URL路徑'blogs/',將其關聯到blog_index視圖,
Django模板
Django的模板系統允許我們創建動態HTML頁面,Django模板使用自己的語言,是Python的一個小子集,
<!-- 示例代碼:創建一個模板 -->
{% for blog in blogs %}
<h2>{{ blog.title }}</h2>
<p>{{ blog.content }}</p>
{% endfor %}
在上述代碼中,我們創建了一個模板,該模板接收一個博客物件串列,并為每個物件生成一個HTML段落,
Django中間件
Django還有一個非常強大的功能,即中間件,Django的中間件是一種輕量級的、底層的“插件”系統,用于全域改變Django的輸入或輸出,
下面是一個例子,展示了如何創建一個簡單的中間件來記錄每個請求的處理時間,
# 示例代碼:創建一個中間件
import time
from django.http import HttpResponse
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start_time = time.time()
response = self.get_response(request)
end_time = time.time()
response['X-Elapsed-Time'] = str(end_time - start_time)
return response
在上面的代碼中,我們創建了一個TimingMiddleware中間件,該中間件在每次請求時計算請求的處理時間,并在HTTP回應頭中添加一個X-Elapsed-Time欄位來顯示這個時間,
Django的資料庫遷移
在Django中,資料庫遷移是一種非常強大的功能,它可以讓我們在不丟失資料的情況下更改資料庫的結構,讓我們來看一個例子,
# 在models.py中,我們將Blog模型修改如下:
class Blog(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.CharField(max_length=100) #新增的欄位
def __str__(self):
return self.title
在上面的代碼中,我們為Blog模型新增了一個author欄位,為了將這個改動應用到資料庫中,我們需要進行資料庫遷移,
# 運行以下命令生成遷移檔案
python manage.py makemigrations
# 運行以下命令應用遷移
python manage.py migrate
通過上述命令,Django會自動在資料庫中為Blog模型添加一個新的欄位,而不需要我們手動修改資料庫,
Django表單和驗證
Django的表單功能可以讓我們更容易地接收和處理用戶資料,同時,Django還提供了多種驗證功能,可以幫助我們驗證用戶資料的有效性,
# 示例代碼:創建一個表單
from django import forms
from .models import Blog
class BlogForm(forms.ModelForm):
class Meta:
model = Blog
fields = ['title', 'content', 'author']
# 在視圖中使用表單
def new_blog(request):
if request.method == 'POST':
form = BlogForm(request.POST)
if form.is_valid():
form.save()
return HttpResponse('Blog saved.')
else:
form = BlogForm()
return render(request, 'new_blog.html', {'form': form})
在上述代碼中,我們創建了一個基于Blog模型的表單,然后在new_blog視圖中使用這個表單,當視圖收到POST請求時,它會驗證表單資料,如果資料有效,則保存新的博客并回傳一個回應,
Django Rest Framework (DRF)
Django Rest Framework是一個強大的工具,用于構建Web API,使用DRF,我們可以快速地創建RESTful API,
# 示例代碼:創建一個API視圖
from rest_framework import generics
from .models import Blog
from .serializers import BlogSerializer
class BlogListCreate(generic.ListCreateAPIView):
queryset = Blog.objects.all()
serializer_class = BlogSerializer
在上面的代碼中,我們使用DRF的ListCreateAPIView視圖,這個視圖可以處理GET和POST請求,我們需要提供一個queryset和一個serializer_class,DRF會自動處理請求和回應,
One More Thing
最后,我們要介紹的是Django的信號(Signals),信號是Django的一種事件驅動機制,當某件事情發生時,會發送一個信號,我們可以撰寫接收器(receivers)來監聽這些信號,
# 示例代碼:創建一個信號接收器
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Blog
@receiver(post_save, sender=Blog)
def notify_admin(sender, instance, created, **kwargs):
if created:
print(f'New blog created: {instance.title}')
在上面的代碼中,我們創建了一個接收器notify_admin,它會在每次創建新的Blog物件后被呼叫,信號讓我們可以撰寫解耦的代碼,使我們的應用更易于維護和擴展,
希望這篇文章能幫助你深入理解和掌握Django,如果你有任何問題或者想要探討更深入的話題,歡迎留言,
如有幫助,請多關注
個人微信公眾號:【Python全視角】
TeahLead_KrisChang,10+年的互聯網和人工智能從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里云認證云服務資深架構師,上億營收AI產品業務負責人,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556393.html
標籤:其他
上一篇:zip解壓和壓縮
下一篇:返回列表
