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

Python Django Web开发实战的更多相关文章

  1. [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)

    1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py   1. ...

  2. Python Django Web开发的5个优秀好习惯

    https://blog.csdn.net/weixin_42134789/article/details/82381854

  3. 如何用Python做Web开发?——Django环境配置

    用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手.     概念 最近有个词儿很流行,叫做“全栈”(full stack ...

  4. 《Python Web开发实战》|百度网盘免费下载|Python Web开发

    <Python Web开发实战>|百度网盘免费下载|Python Web开发 提取码:rnz4 内容简介 这本书涵盖了Web开发的方方面面,可以分为如下部分: 1. 使用最新的Flask ...

  5. Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面

    1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...

  6. Django Web开发学习笔记(1)

    一.Python的标准类型 (1)bool型 >>> bool("") False >>> bool(None) False >>& ...

  7. Django Web开发指南笔记

    Django Web开发指南笔记 语句VS表达式 python代码由表达式和语句组成,由解释器负责执行. 主要区别:表达式是一个值,它的结果一定是一个python对象:如:12,1+2,int('12 ...

  8. 在 Windows 上使用 Python 进行 web 开发

    本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一篇我们介绍了在Windows 10下进行初学者入门开发Python的指 ...

  9. Django web 开发指南 no such table:

    在学习django web开发指南时,发布新博客点击save后会有error提示:no such table balabalabala... 百度了一下说重新运行manage.py syncdb 就可 ...

  10. 《Java web 开发实战经典》读书笔记

    去年年末,也就是大四上学期快要结束的时候,当时保研的事情确定了下来,终于有了一些空闲的时间可以学点实用的技术. 之前做数据库课程设计的时候,也接触过java web的知识,当时做了一个卖二手书籍的网站 ...

随机推荐

  1. window设置开启启动程序的几种方式比较

    一.设置开机启动项 进入启动文件夹,拷贝程序的快捷方式到这个文件夹即可. 可在任务管理器--启动,查看是否设置成功 启动时间:用户登陆之后. 二.使用计划任务设置自启 进入计划任务界面进行配置,按wi ...

  2. [Linux]U盘启动盘安装CentOS7系统(LiveGNOME版)

    1 准备:工具 U盘 容量:视CentOS具体版本需要而定.推荐4G+ UltraISO(软碟通) ISO制作工具 / U盘启动盘刻录工具 2 制作:U盘启动盘 step1 下载CentOS镜像 Ce ...

  3. Java 生成海报

    最近项目有个功能是生成海报 一个背景图片,一个二维码图片 将两个图片合并成一个图片. 写了一个工具类,需要的朋友自取. 1 @Component 2 public class PictureUtil ...

  4. day12:闭包函数&匿名函数(lambda)

    闭包函数 闭包函数的定义: 如果内函数使用了外函数的局部变量并且外函数把内函数返回出来的过程 叫做闭包里面的内函数是闭包函数 一个简单的闭包函数示例: def songyunjie_family(): ...

  5. MySQL(十四)分析查询语句Explain 七千字总结

    分析查询语句:EXPLAIN 1概述 ​ 定位了查询慢的SQL之后,就可以使用EXPLAIN或者DESCRIBE工具做针对性的分析查询.两者使用方法相同,并且分析结果也是相同的. ​ MySQL中有专 ...

  6. MySQL(七)索引

    索引的数据结构 1 为什么使用索引 索引概述 索引(Index)是帮助MySQL高效获取数据的数据结构.是"排好序的快速查找结构",满足特定的查找算法 索引是在存储引擎中实现的,每 ...

  7. .NET快速开发框架-RDIFramework.NET 全新EasyUI版发布

    RDIFramework.NET,基于.NET的快速信息化系统快速开发框架.10年专注.易上手.多组件.全源码.可灵活构建各类型系统. 1.RDIFramework.NET快速开发框架简介 RDIFr ...

  8. Linx 阶段一

    Linux Linux常用命令 具体演示 1). ls 2). pwd 3). touch 4). mkdir 5). rm 使用技巧 1. 连按 Tab健自动补齐文件名 2. ll 查看当前目录文件 ...

  9. 【Visual Leak Detector】源码文件概览

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇对 VLD 源码包中的各文件用途做个概述.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. 整体概览 2. ...

  10. cryptohack wp day(1)

    就从头开始吧 第一题 (ASCII) 一道简单的ASCII码转换,直接用题目的提示代码解就行了 ascii=[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, ...