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
在下面的代码中,咱们定义了一个简略的博客模型,蕴含题目和内容两个字段。其中,CharField
和TextField
都是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产品业务负责人。