Python Django Web开发实战
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 %}
<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开发实战的更多相关文章
- [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)
1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 1. ...
- Python Django Web开发的5个优秀好习惯
https://blog.csdn.net/weixin_42134789/article/details/82381854
- 如何用Python做Web开发?——Django环境配置
用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手. 概念 最近有个词儿很流行,叫做“全栈”(full stack ...
- 《Python Web开发实战》|百度网盘免费下载|Python Web开发
<Python Web开发实战>|百度网盘免费下载|Python Web开发 提取码:rnz4 内容简介 这本书涵盖了Web开发的方方面面,可以分为如下部分: 1. 使用最新的Flask ...
- Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面
1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...
- Django Web开发学习笔记(1)
一.Python的标准类型 (1)bool型 >>> bool("") False >>> bool(None) False >>& ...
- Django Web开发指南笔记
Django Web开发指南笔记 语句VS表达式 python代码由表达式和语句组成,由解释器负责执行. 主要区别:表达式是一个值,它的结果一定是一个python对象:如:12,1+2,int('12 ...
- 在 Windows 上使用 Python 进行 web 开发
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一篇我们介绍了在Windows 10下进行初学者入门开发Python的指 ...
- Django web 开发指南 no such table:
在学习django web开发指南时,发布新博客点击save后会有error提示:no such table balabalabala... 百度了一下说重新运行manage.py syncdb 就可 ...
- 《Java web 开发实战经典》读书笔记
去年年末,也就是大四上学期快要结束的时候,当时保研的事情确定了下来,终于有了一些空闲的时间可以学点实用的技术. 之前做数据库课程设计的时候,也接触过java web的知识,当时做了一个卖二手书籍的网站 ...
随机推荐
- python入门教程之十函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...
- [Linux]Xshell连接Centos7能Ping通但无法连接问题[ssh(d)+firewalld/iptables+chkconfig]
一 方案与思路 0 xshell客户端监测是否能够ping通目标服务器. 前提:知晓目标服务器IP地址 Linux: ifconfig -a Windows: ipconfig -a 1 利用fire ...
- [Git]Git统计代码行数
1 前言 今天,有这么一个需求:小组老大要求咱们[每个人]把[上个月]的[代码行数]统计一下并上报. 成,统计就统计,但那么多项目,总不能让我用手去数吧?何况,时间久了,自己也不清楚自己改了哪些地方了 ...
- IDEA 修改Maven默认的全局设置
每次打开Maven项目都需要重新配置Maven的地址.非常不爽! 解决方法:找到File->Other Settings->Default Settings 修改配置 下次打开就不用再配置 ...
- Python程序笔记20230303
成绩评级程序 分数 < 60,D 60 <= 分数 < 80,C 80 <= 分数 < 90,B 90 <= 分数 < 100,A 分数 == 100,S # ...
- OpenAI API
OpenAI API Documentation https://platform.openai.com/docs/models/overview GPT 迭代过程 版本 发布时间 训练方案 参数量 ...
- 发现Mysql的主从数据库没有同步,差点凉凉了
摘要:今天发现Mysql的主从数据库没有同步,瞬间整个人头皮发麻. 本文分享自华为云社区<糟了,生产环境数据竟然不一致,人麻了!>,作者:冰 河 . 今天发现Mysql的主从数据库没有同步 ...
- 安装Nodejs,执行npm命令异常
异常现象: 在安装完成Nodejs之后,使用npm install时提示异常: 使用cmd查看npm版本,也报同样的错误. "operation not permitted, mkdir ' ...
- windows10下编译32位和64位webrtc(m77)静态库
1. windows10下编译32位和64位webrtc(m77)静态库 省略挂代理下载depot_tools以及webrtc代码的过程... 可参考webrtc编译 务必在 cmd 终端环境下进入到 ...
- 使用4G通信模块和MQTT协议,完成物联网设备开发。
使用4G通信模块和MQTT协议,完成物联网设备开发. (1)安装并使用4G模块通信模块,建立microPython开发环境: (2)使用提供的Demo开发例程,使用MQTT传输协议连接阿里或腾讯网站, ...