Python Django Web开发实战

简介: 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

在上面的代码中,我们定义了一个简单的博客模型,包含标题和内容两个字段。其中,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。如果你有任何问题或者想要探讨更深入的话题,欢迎留言。

目录
相关文章
|
16天前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
141 0
|
17天前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
343 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
17天前
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
222 0
|
4月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
118 2
|
4月前
|
IDE 开发工具 Python
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级,不升级无法使用,安装python扩展包的时候一直停留在installing
99 4
|
6月前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
169 6
|
8月前
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
178 1
打造高效的Web Scraper:Python与Selenium的完美结合
|
7月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
11月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
432 67
|
10月前
|
弹性计算 Java 数据库
Web应用上云经典架构实战
本课程详细介绍了Web应用上云的经典架构实战,涵盖前期准备、配置ALB、创建服务器组和监听、验证ECS公网能力、环境配置(JDK、Maven、Node、Git)、下载并运行若依框架、操作第二台ECS以及验证高可用性。通过具体步骤和命令,帮助学员快速掌握云上部署的全流程。
220 1

推荐镜像

更多