哪些網(wǎng)站做微課賺錢免費永久個人域名注冊
Python Django全面介紹
Django是一個非常強大的Python Web開發(fā)框架,它以"快速開發(fā)"和"干凈、實用的設(shè)計"為設(shè)計宗旨。本文將從Django的基本概念開始,逐漸引導(dǎo)大家理解如何使用Django構(gòu)建復(fù)雜的web應(yīng)用程序。
Django基本概念與原理
首先,讓我們從Django的核心組件開始講解。Django遵循MVC模型-視圖-控制器設(shè)計模式,并在Python中有一個特殊的表現(xiàn)形式,稱為MTV模型-模板-視圖。這是因為Django的控制器部分由框架自身內(nèi)部處理,而開發(fā)者主要與模型、模板和視圖交互。
# 示例代碼:創(chuàng)建一個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
在上面的代碼中,我們定義了一個簡單的博客模型,包含標(biāo)題和內(nèi)容兩個字段。其中,CharField
和TextField
都是Django提供的數(shù)據(jù)庫字段類型。
Django的視圖與URL配置
在Django中,視圖是Python函數(shù),用于接收Web請求并返回Web響應(yīng)。每個視圖函數(shù)都將一個HttpRequest對象作為參數(shù),并返回一個HttpResponse對象。視圖與Web應(yīng)用程序的URLs關(guān)聯(lián),這是通過URL配置完成的。
# 示例代碼:創(chuàng)建一個視圖
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
,該視圖從數(shù)據(jù)庫獲取所有的博客條目并顯示其標(biāo)題。然后我們在URL配置中創(chuàng)建了一個新的URL路徑’blogs/',將其關(guān)聯(lián)到blog_index
視圖。
Django模板
Django的模板系統(tǒng)允許我們創(chuàng)建動態(tài)HTML頁面。Django模板使用自己的語言,是Python的一個小子集。
<!-- 示例代碼:創(chuàng)建一個模板 -->
{% for blog in blogs %} <h2>{{ blog.title }}</h2> <p>{{ blog.content }}</p>
{% endfor %}
在上述代碼中,我們創(chuàng)建了一個模板,該模板接收一個博客對象列表,并為每個對象生成一個HTML段落。
Django中間件
Django還有一個非常強大的功能,即中間件。Django的中間件是一種輕量級的、底層的“插件”系統(tǒng),用于全局改變Django的輸入或輸出。
下面是一個例子,展示了如何創(chuàng)建一個簡單的中間件來記錄每個請求的處理時間。
# 示例代碼:創(chuàng)建一個中間件
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
在上面的代碼中,我們創(chuàng)建了一個TimingMiddleware
中間件,該中間件在每次請求時計算請求的處理時間,并在HTTP響應(yīng)頭中添加一個X-Elapsed-Time
字段來顯示這個時間。
Django的數(shù)據(jù)庫遷移
在Django中,數(shù)據(jù)庫遷移是一種非常強大的功能,它可以讓我們在不丟失數(shù)據(jù)的情況下更改數(shù)據(jù)庫的結(jié)構(gòu)。讓我們來看一個例子。
# 在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
在上面的代碼中,我們?yōu)锽log模型新增了一個author
字段。為了將這個改動應(yīng)用到數(shù)據(jù)庫中,我們需要進行數(shù)據(jù)庫遷移。
# 運行以下命令生成遷移文件
python manage.py makemigrations # 運行以下命令應(yīng)用遷移
python manage.py migrate
通過上述命令,Django會自動在數(shù)據(jù)庫中為Blog模型添加一個新的字段,而不需要我們手動修改數(shù)據(jù)庫。
Django表單和驗證
Django的表單功能可以讓我們更容易地接收和處理用戶數(shù)據(jù)。同時,Django還提供了多種驗證功能,可以幫助我們驗證用戶數(shù)據(jù)的有效性。
# 示例代碼:創(chuàng)建一個表單
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})
在上述代碼中,我們創(chuàng)建了一個基于Blog模型的表單,然后在new_blog
視圖中使用這個表單。當(dāng)視圖收到POST請求時,它會驗證表單數(shù)據(jù),如果數(shù)據(jù)有效,則保存新的博客并返回一個響應(yīng)。
Django Rest Framework (DRF)
Django Rest Framework是一個強大的工具,用于構(gòu)建Web API。使用DRF,我們可以快速地創(chuàng)建RESTful API。
# 示例代碼:創(chuàng)建一個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會自動處理請求和響應(yīng)。
One More Thing
最后,我們要介紹的是Django的信號(Signals)。信號是Django的一種事件驅(qū)動機制,當(dāng)某件事情發(fā)生時,會發(fā)送一個信號,我們可以編寫接收器(receivers)來監(jiān)聽這些信號。
# 示例代碼:創(chuàng)建一個信號接收器
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}')
在上面的代碼中,我們創(chuàng)建了一個接收器notify_admin
,它會在每次創(chuàng)建新的Blog對象后被調(diào)用。信號讓我們可以編寫解耦的代碼,使我們的應(yīng)用更易于維護和擴展。
關(guān)于Python學(xué)習(xí)指南
學(xué)好 Python 不論是就業(yè)還是做副業(yè)賺錢都不錯,但要學(xué)會 Python 還是要有一個學(xué)習(xí)規(guī)劃。最后給大家分享一份全套的 Python 學(xué)習(xí)資料,給那些想學(xué)習(xí) Python 的小伙伴們一點幫助!
包括:Python激活碼+安裝包、Python web開發(fā),Python爬蟲,Python數(shù)據(jù)分析,人工智能、自動化辦公等學(xué)習(xí)教程。帶你從零基礎(chǔ)系統(tǒng)性的學(xué)好Python!
👉Python所有方向的學(xué)習(xí)路線👈
Python所有方向路線就是把Python常用的技術(shù)點做整理,形成各個領(lǐng)域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。(全套教程文末領(lǐng)取)
👉Python學(xué)習(xí)視頻600合集👈
觀看零基礎(chǔ)學(xué)習(xí)視頻,看視頻學(xué)習(xí)是最快捷也是最有效果的方式,跟著視頻中老師的思路,從基礎(chǔ)到深入,還是很容易入門的。
溫馨提示:篇幅有限,已打包文件夾,獲取方式在:文末
👉Python70個實戰(zhàn)練手案例&源碼👈
光學(xué)理論是沒用的,要學(xué)會跟著一起敲,要動手實操,才能將自己的所學(xué)運用到實際當(dāng)中去,這時候可以搞點實戰(zhàn)案例來學(xué)習(xí)。
👉Python大廠面試資料👈
我們學(xué)習(xí)Python必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
👉Python副業(yè)兼職路線&方法👈
學(xué)好 Python 不論是就業(yè)還是做副業(yè)賺錢都不錯,但要學(xué)會兼職接單還是要有一個學(xué)習(xí)規(guī)劃。
👉 這份完整版的Python全套學(xué)習(xí)資料已經(jīng)上傳,朋友們?nèi)绻枰梢話呙柘路紺SDN官方認證二維碼或者點擊鏈接免費領(lǐng)取【保證100%免費
】
點擊免費領(lǐng)取《CSDN大禮包》:Python入門到進階資料 & 實戰(zhàn)源碼 & 兼職接單方法 安全鏈接免費領(lǐng)取
