翼度科技»论坛 编程开发 python 查看内容

Python Django Web开发实战

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
Python Django全面介绍

Django是一个非常强大的Python Web开发框架,它以"快速开发"和"干净、实用的设计"为设计宗旨。本文将从Django的基本概念开始,逐渐引导大家理解如何使用Django构建复杂的web应用程序。
Django基本概念与原理

首先,让我们从Django的核心组件开始讲解。Django遵循MVC模型-视图-控制器设计模式,并在Python中有一个特殊的表现形式,称为MTV模型-模板-视图。这是因为Django的控制器部分由框架自身内部处理,而开发者主要与模型、模板和视图交互。
  1. # 示例代码:创建一个Django模型
  2. from django.db import models
  3. class Blog(models.Model):
  4.     title = models.CharField(max_length=200)
  5.     content = models.TextField()
  6.     def __str__(self):
  7.         return self.title
复制代码
在上面的代码中,我们定义了一个简单的博客模型,包含标题和内容两个字段。其中,CharField和TextField都是Django提供的数据库字段类型。
Django的视图与URL配置

在Django中,视图是Python函数,用于接收Web请求并返回Web响应。每个视图函数都将一个HttpRequest对象作为参数,并返回一个HttpResponse对象。视图与Web应用程序的URLs关联,这是通过URL配置完成的。
  1. # 示例代码:创建一个视图
  2. from django.http import HttpResponse
  3. from .models import Blog
  4. def blog_index(request):
  5.     blogs = Blog.objects.all()
  6.     output = ', '.join([blog.title for blog in blogs])
  7.     return HttpResponse(output)
  8. # 示例代码:URL配置
  9. from django.urls import path
  10. from . import views
  11. urlpatterns = [
  12.     path('blogs/', views.blog_index, name='blog_index'),
  13. ]
复制代码
上述代码中,我们首先定义了一个视图blog_index,该视图从数据库获取所有的博客条目并显示其标题。然后我们在URL配置中创建了一个新的URL路径'blogs/',将其关联到blog_index视图。
Django模板

Django的模板系统允许我们创建动态HTML页面。Django模板使用自己的语言,是Python的一个小子集。
  1. {% for blog in blogs %}
  2.     <h2>{{ blog.title }}</h2>
  3.     <p>{{ blog.content }}</p>
  4. {% endfor %}
复制代码
在上述代码中,我们创建了一个模板,该模板接收一个博客对象列表,并为每个对象生成一个HTML段落。
Django中间件

Django还有一个非常强大的功能,即中间件。Django的中间件是一种轻量级的、底层的“插件”系统,用于全局改变Django的输入或输出。
下面是一个例子,展示了如何创建一个简单的中间件来记录每个请求的处理时间。
  1. # 示例代码:创建一个中间件
  2. import time
  3. from django.http import HttpResponse
  4. class TimingMiddleware:
  5.     def __init__(self, get_response):
  6.         self.get_response = get_response
  7.     def __call__(self, request):
  8.         start_time = time.time()
  9.         response = self.get_response(request)
  10.         end_time = time.time()
  11.         response['X-Elapsed-Time'] = str(end_time - start_time)
  12.         return response
复制代码
在上面的代码中,我们创建了一个TimingMiddleware中间件,该中间件在每次请求时计算请求的处理时间,并在HTTP响应头中添加一个X-Elapsed-Time字段来显示这个时间。
Django的数据库迁移

在Django中,数据库迁移是一种非常强大的功能,它可以让我们在不丢失数据的情况下更改数据库的结构。让我们来看一个例子。
  1. # 在models.py中,我们将Blog模型修改如下:
  2. class Blog(models.Model):
  3.     title = models.CharField(max_length=200)
  4.     content = models.TextField()
  5.     author = models.CharField(max_length=100) #新增的字段
  6.     def __str__(self):
  7.         return self.title
复制代码
在上面的代码中,我们为Blog模型新增了一个author字段。为了将这个改动应用到数据库中,我们需要进行数据库迁移。
  1. # 运行以下命令生成迁移文件
  2. python manage.py makemigrations
  3. # 运行以下命令应用迁移
  4. python manage.py migrate
复制代码
通过上述命令,Django会自动在数据库中为Blog模型添加一个新的字段,而不需要我们手动修改数据库。
Django表单和验证

Django的表单功能可以让我们更容易地接收和处理用户数据。同时,Django还提供了多种验证功能,可以帮助我们验证用户数据的有效性。
  1. # 示例代码:创建一个表单
  2. from django import forms
  3. from .models import Blog
  4. class BlogForm(forms.ModelForm):
  5.     class Meta:
  6.         model = Blog
  7.         fields = ['title', 'content', 'author']
  8. # 在视图中使用表单
  9. def new_blog(request):
  10.     if request.method == 'POST':
  11.         form = BlogForm(request.POST)
  12.         if form.is_valid():
  13.             form.save()
  14.             return HttpResponse('Blog saved.')
  15.     else:
  16.         form = BlogForm()
  17.    
  18.     return render(request, 'new_blog.html', {'form': form})
复制代码
在上述代码中,我们创建了一个基于Blog模型的表单,然后在new_blog视图中使用这个表单。当视图收到POST请求时,它会验证表单数据,如果数据有效,则保存新的博客并返回一个响应。
Django Rest Framework (DRF)

Django Rest Framework是一个强大的工具,用于构建Web API。使用DRF,我们可以快速地创建RESTful API。
  1. # 示例代码:创建一个API视图
  2. from rest_framework import generics
  3. from .models import Blog
  4. from .serializers import BlogSerializer
  5. class BlogListCreate(generic.ListCreateAPIView):
  6.     queryset = Blog.objects.all()
  7.     serializer_class = BlogSerializer
复制代码
在上面的代码中,我们使用DRF的ListCreateAPIView视图,这个视图可以处理GET和POST请求。我们需要提供一个queryset和一个serializer_class,DRF会自动处理请求和响应。
One More Thing

最后,我们要介绍的是Django的信号(Signals)。信号是Django的一种事件驱动机制,当某件事情发生时,会发送一个信号,我们可以编写接收器(receivers)来监听这些信号。
  1. # 示例代码:创建一个信号接收器
  2. from django.db.models.signals import post_save
  3. from django.dispatch import receiver
  4. from .models import Blog
  5. @receiver(post_save, sender=Blog)
  6. def notify_admin(sender, instance, created, **kwargs):
  7.     if created:
  8.         print(f'New blog created: {instance.title}')
复制代码
在上面的代码中,我们创建了一个接收器notify_admin,它会在每次创建新的Blog对象后被调用。信号让我们可以编写解耦的代码,使我们的应用更易于维护和扩展。
希望这篇文章能帮助你深入理解和掌握Django。如果你有任何问题或者想要探讨更深入的话题,欢迎留言。
如有帮助,请多关注
个人微信公众号:【Python全视角】
TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。

来源:https://www.cnblogs.com/xfuture/p/17516934.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具