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

在上面的代码中,我们定义了一个简单的博客模型,包含标题和内容两个字段。其中,CharFieldTextField都是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对象后被调用。信号让我们可以编写解耦的代码,使我们的应用更易于维护和扩展。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐