「 Python之Django框架:搭建一个简单管理系统」

发布时间:2026/9/3 8:44:23
「 Python之Django框架:搭建一个简单管理系统」 介绍了数据库基础Python Web开发—Web客户端进阶—数据库基础、关系数据库、Redis安装在前面学习中大家已经了解了Python Web的基础知识接下来讲解一款能够节约开发时间并且能让开发过程妙趣横生的Web开发框架——Django。通过减少重复的代码Django能够使大家专注于Web应用上有趣的关键性内容。Django中URL映射配置、视图函数、WSGI、请求、响应、一个简单的表单、表单绑定、表单数据验证。一、Django概述、安装及使用ØDjango简介Django起源于劳伦斯出版集团旗下在线新闻站单的管理即内容管理系统Content Management SystemCMS软件。Django是Python Web的应用框架之一是使用Python编写的。Django框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的并于2005年7月在BSD许可证下以开源形式发布。Django是一个基于MVC架构的框架其中控制器接收用户输入的部分由框架自行处理因此在Django中更关注的是模型Model、模板(Template)和视图View称为 MTV模式。它们各自的关系如表所示。除了以上内容Django还包含以下几部分内容管理工具Management内置一整套的创建站单、迁移数据、维护静态文件的命令工具。表单Form通过内置数据类型和控件生成HTML表单。管理站Admin通过声明需要管理的Model快速生成后台数据管理网站。ØDjango安装使用PyCharm进行开发因此本节将针对PyCharm下使用Django开发Web项目为例进行安装讲解。首先打开PyCharm如图所示。单击Create New Project单击Django并新建Django项目如图所示。Location项目路径以及名称。Interpreter运行环境可以是下载的Python.exe也可以是建立的虚拟环境建议使用虚拟环境防止多个项目运行冲突。More Settings更多设置。Template language模板语言Django。Templates folder模板所在文件夹一般默认templates。Application name应用名称。配置好之后单击CreatePyCharm会自动为项目安装Django环境随后即可创建一个Django项目。创建完成后打开项目如图所示。其中应用App1中包含以下文件__init__.py其中暂无内容含有此文件使App1可以成为Python的一个包。admin.py默认为空是管理站单的模型声明文件。apps.py应用信息文件。models.py模型层数据类文件。tests.py用来测试的文件。views.py视图层文件用来定义URL响应函数。其中django1中包含以下文件__init__.py初始化文件暂无内容。settings.py配置文件包括系统的数据库配置、应用配置和其他配置。urls.py定义Web工程URL映射的配置。wsgi.py定义WSGI接口方便与其他Web服务器进行集成一般不动。在整个项目中还有两个文件templates模板文件夹。manage.py管理本项目的命令行工具之后的站点运行、数据库自动生成、静态文件收集都要通过此文件完成。运行项目可直接单击右上角的三角形也可使用命令“python manage.py runserver”进行启动服务器之后在浏览器中输入localhost:8000显示结果如图所示即创建成功。创建成功后接下来开始使用Django开发小型项目。ØHello World实现上一节创建了Django项目在此基础上开始Hello World的编写。首先在django1/App1/views.py中写入以下代码import datetime from django.http import HttpResponse; def helloWrod(request): s Hello Word current_time datetime.datetime.now() #格式化current_time current_time current_time.strftime(%Y-%m-%d %H:%M:%S) html htmlhead/headbodyh1%s/h1p%s/p/body/html% (s, current_time) return HttpResponse(html)之后在django1/django1中urls.py的“urlpatterns”中加入以下代码path(App1/, App1.views.helloWrod), # 这里一定不要加 ()接着导入以下文件import App1.views完成运行后在浏览器中输入localhost:8000/App1如图所示即成功完成Hello World的编写。Hello World的完成主要内容单如下首先在视图层建立一个路由响应函数helloWorld()只是简单地将一条被HttpResponse()封装的Hello World信息返回。通过URL将HTTP访问与路由响应函数对应绑定起来。这样才能将“Hello World”以及时间返回到相应的HTML页面中去。注意Web项目正常运行需要搭载相应的Web服务器Django中自带服务器因此小型项目可以直接使用其自带的服务器但实际环境部署使用的是Nginx服务器。模型层ØORMDjango使用模型操作关系型数据库时需要使用到ORM技术因此接下来讲解ORM技术的相关内容。1.ORM简介对象关系映射Object Relational Mapping或简称O/RM或O/R mappingORM是一种程序技术用于实现面向对象编程语言里不同类型系统数据之间的转换。从效果上说它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。ORM方法论基于三个核心原则简单以最基本的形式建模数据。传达性数据库结构被任何人都能理解的语言文档化。精确性基于数据模型来创建正确标准化的结构。ORM技术的原理图如图所示。在图中通过判断对象是否发生变化来执行缓存中的内容从而生成相应的SQL语句进行操作数据库封装了数据库的操作方便开发者对数据库进行操作。2.Python中ORM库介绍从上一节的内容可以看出ORM是在开发者与数据库之间建立了一个中间层将数据库中的数据转换成Python中的对象这样既可以规避不同数据库的差异性又可以使开发者简化数据库的操作使开发更加方便快捷而且可以对数据库的数据使用面向对象的高级特性。Python提供了很多ORM支持的组件每个组件都有各自的特性但是在数据库操作的原理上是一致的接下来对Python中常用的ORM插件进行讲解。SQLObject一个介于SQL数据库和Python之间映射对象的Python ORM。它的特点是采用了ActiveRecord 模式代码相对少很轻便。Storm一个介于单个或多个数据库与Python之间映射对象的Python ORM。为了支持动态存储和取回对象信息它允许开发者构建跨数据表的复杂查询。Django’s ORM是Django框架中特定的ORM技术由于Django发展历史长内部结构十分强大完整导致其灵活性下降。致使其他的ORM技术在Django中无法正常使用。Peewee是一款轻量级、丰富的对象关系映射Object Relation MappingORM支持Postgresql、MySQL和SQLite。SQLAlchemy是Python编程语言下的一款开源软件是Python中最有名ORM框架主要是为高效和高性能的数据库访问设计实现了完整的企业级持久模型其理念是SQL数据库的量级和性能重要于对象集合而对象集合的抽象又重要于表和行。Django框架中主要是使用自带的ORM技术来操作数据库即使用Django’s ORM。二、实现增删改查的业务1.App1/models.py定义数据表from django.db import models # 以「学生」为例定义表结构 class Student(models.Model): name models.CharField(max_length50, verbose_name姓名) age models.IntegerField(verbose_name年龄) gender models.CharField(max_length10, verbose_name性别) address models.TextField(verbose_name地址, blankTrue) def __str__(self): return self.name class Meta: verbose_name 学生 verbose_name_plural 学生2.App1/views.py核心 CRUD 逻辑把你现有的内容替换成下面的代码from django.shortcuts import render, redirect, get_object_or_404 from .models import Student # 1. 列表页查 def student_list(request): students Student.objects.all() return render(request, student/list.html, {students: students}) # 2. 新增增 def student_add(request): if request.method POST: name request.POST.get(name) age request.POST.get(age) gender request.POST.get(gender) address request.POST.get(address) Student.objects.create( namename, ageage, gendergender, addressaddress ) return redirect(student_list) return render(request, student/add.html) # 3. 编辑改 def student_edit(request, pk): student get_object_or_404(Student, pkpk) if request.method POST: student.name request.POST.get(name) student.age request.POST.get(age) student.gender request.POST.get(gender) student.address request.POST.get(address) student.save() return redirect(student_list) return render(request, student/edit.html, {student: student}) # 4. 删除删 def student_delete(request,pk): student get_object_or_404(Student, pkpk) student.delete() return redirect(student_list)3.App1/admin.py后台管理注册from django.contrib import admin from .models import Student admin.site.register(Student)4.django_demo1/settings.py配置关键修改两处# 1. 注册 App1 INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, App1, # 加上这一行 ] # 2. 配置模板路径你已经有全局 templates 文件夹确保这样写 TEMPLATES [ { BACKEND: django.template.backends.django.DjangoTemplates, DIRS: [BASE_DIR / templates], # 这里确保包含全局 templates 文件夹 APP_DIRS: True, OPTIONS: { context_processors: [ django.template.context_processors.debug, django.template.context_processors.request, django.contrib.auth.context_processors.auth, django.contrib.messages.context_processors.messages, ], }, }, ]5.django_demo1/urls.py路由配置from django.contrib import admin from django.urls import path from App1 import views urlpatterns [ path(admin/, admin.site.urls), # 学生CRUD路由 path(, views.student_list, namestudent_list), path(add/, views.student_add, namestudent_add), path(edit/int:pk/, views.student_edit, namestudent_edit), path(delete/int:pk/, views.student_delete, namestudent_delete), ]三、创建模板文件按你的templates目录在你的全局templates文件夹里新建student子文件夹再放 3 个 HTML 文件templates/ └── student/ ├── list.html ├── add.html └── edit.htmltemplates/student/list.html列表页!DOCTYPE html html head meta charsetUTF-8 title学生列表/title /head body h1学生信息管理/h1 a href{% url student_add %}添加学生/a hr table border1 cellpadding8 cellspacing0 tr thID/th th姓名/th th年龄/th th性别/th th地址/th th操作/th /tr {% for s in students %} tr td{{ s.id }}/td td{{ s.name }}/td td{{ s.age }}/td td{{ s.gender }}/td td{{ s.address }}/td td a href{% url student_edit s.id %}编辑/a a href{% url student_delete s.id %} onclickreturn confirm(确定删除)删除/a /td /tr {% empty %} tr td colspan6暂无数据/td /tr {% endfor %} /table /body /htmltemplates/student/add.html新增页!DOCTYPE html html head meta charsetUTF-8 title添加学生/title /head body h1添加学生/h1 form methodpost {% csrf_token %} p姓名input typetext namename required/p p年龄input typenumber nameage required/p p性别input typetext namegender/p p地址textarea nameaddress/textarea/p p button typesubmit提交/button a href{% url student_list %}返回列表/a /p /form /body /htmltemplates/student/edit.html编辑页!DOCTYPE html html head meta charsetUTF-8 title编辑学生/title /head body h1编辑学生/h1 form methodpost {% csrf_token %} p姓名input typetext namename value{{ student.name }} required/p p年龄input typenumber nameage value{{ student.age }} required/p p性别input typetext namegender value{{ student.gender }}/p p地址textarea nameaddress{{ student.address }}/textarea/p p button typesubmit保存修改/button a href{% url student_list %}返回列表/a /p /form /body /html四、执行命令在终端运行#每建一个表 和 发生表结构变化都需要执行下 1 2 命令行 # 1. 生成迁移文件 python manage.py makemigrations # 2. 执行建表 python manage.py migrate # 3. 启动服务 python manage.py runserver然后访问http://127.0.0.1:8000 就能看到完整的增删改查页面了。