关于python:Python-Django-Web开发实战

3次阅读

共计 3731 个字符,预计需要花费 10 分钟才能阅读完成。

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 对象后被调用。信号让咱们能够编写解耦的代码,使咱们的利用更易于保护和扩大。

心愿这篇文章能帮忙你深刻了解和把握 Django。如果你有任何问题或者想要探讨更深刻的话题,欢送留言。

如有帮忙,请多关注
集体微信公众号:【Python 全视角】
TeahLead_KrisChang,10+ 年的互联网和人工智能从业教训,10 年 + 技术和业务团队治理教训,同济软件工程本科,复旦工程治理硕士,阿里云认证云服务资深架构师,上亿营收 AI 产品业务负责人。

正文完
 0