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