码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python Django Web开发实战


    合集 - python全景系列(29)
    1.<Python全景系列-1> Hello World,1分钟配置好你的python环境05-142.< Python全景系列-2 > Python数据类型大盘点05-153.< Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!05-174.< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?05-185.< Python全景系列-5 > 解锁Python并发编程:多线程和多进程的神秘面纱揭晓05-216.< Python全景系列-6 > 掌握Python面向对象编程的关键:深度探索类与对象05-247.< Python全景系列-7 > 提升Python编程效率:模块与包全面解读05-258.< Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践05-299.< Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类05-3110.Python生成器深度解析:构建强大的数据处理管道06-0511.掌握Python文件操作:从基础到高阶的全方位探索06-1212.Python单元测试之道:从入门到精通的全面指南07-1813.深入探索 Django Rest Framework07-1314.跨越HTTP无状态边界:Cookie与Session在Django中的实战应用07-1115.Django ORM:最全面的数据库处理指南07-1016.详解Django请求与响应:深入理解Web Http交互的核心机制07-0917.Python Django 模版全解与实战07-0818.Django容易被遗忘却无比重要的框架默认文件介绍及使用方法07-0719.Python 爬虫实战:驾驭数据洪流,揭秘网页深处07-0620.Python史上最全种类数据库操作方法,你能想到的数据库类型都在里面!甚至还有云数据库!07-0521.Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!07-04
    22.Python Django Web开发实战06-30
    23.Python Flask - 快速构建Web应用详解06-2924.深入Python网络编程:从基础到实践06-2525.一文掌握Python多线程与多进程06-2026.Python正则表达式完全指南06-1327.Python的Lambda函数: 一把极简编程的瑞士军刀06-0828.Python 列表推导式:简洁、高效的数据操作艺术06-0729.Python日志模块:实战应用与最佳实践07-19
    收起

    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
    

    在上面的代码中,我们定义了一个简单的博客模型,包含标题和内容两个字段。其中,CharField和TextField都是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 %}
        

    {{ blog.title }}

    {{ blog.content }}

    {% 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产品业务负责人。

  • 相关阅读:
    电商的噩梦:全国快递网点停摆65%?
    力扣大厂热门面试算法题 - 动态规划
    K线形态识别_黑三兵
    基于VUE + Echarts 实现可视化数据大屏快递业务数据
    不就是Java吗之类和对象 Part I
    使用 Sa-Token 实现不同的登录模式:单地登录、多地登录、同端互斥登录
    Linux安装RabbitMQ
    RocketMQ(4.9.4)学习笔记 - 安装部署
    Leetcode226.翻转二叉树
    Linux 命令(197)—— dig 命令
  • 原文地址:https://www.cnblogs.com/xfuture/p/17516934.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号