Python Django全面介绍

Django是一个十分弱小的Python Web开发框架,它以"疾速开发"和"洁净、实用的设计"为设计主旨。本文将从Django的基本概念开始,逐步疏导大家了解如何应用Django构建简单的web应用程序。

Django基本概念与原理

首先,让咱们从Django的外围组件开始解说。Django遵循MVC模型-视图-控制器设计模式,并在Python中有一个非凡的表现形式,称为MTV模型-模板-视图。这是因为Django的控制器局部由框架本身外部解决,而开发者次要与模型、模板和视图交互。

# 示例代码:创立一个Django模型from django.db import modelsclass 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 HttpResponsefrom .models import Blogdef blog_index(request):    blogs = Blog.objects.all()    output = ', '.join([blog.title for blog in blogs])    return HttpResponse(output)# 示例代码:URL配置from django.urls import pathfrom . import viewsurlpatterns = [    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 timefrom django.http import HttpResponseclass 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 formsfrom .models import Blogclass 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 genericsfrom .models import Blogfrom .serializers import BlogSerializerclass 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_savefrom django.dispatch import receiverfrom .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产品业务负责人。