python Django框架快速入门教程(后台管理)


Posted in Python onJuly 21, 2021

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。

Django 是一个开放源代码的 Web 应用框架,由 Python 写成。

Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。

Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。

参考官方文档:Django官方文档https://docs.djangoproject.com/zh-hans/3.2/

下面看下python Django框架快速入门,步骤如下所示:

第一步:项目的创建与运行

第一次使用 Django ,那么你必须要照顾一些初始设置。也就是说,您需要自动生成一些建立 Django
项目的代码。
从命令行 cd 到您要存储代码的目录,然后运行以下命令:

django-admin startproject BookManage

进入项目目录,目录结构如下图:

python Django框架快速入门教程(后台管理)

 目录说明:
manage.py :一个命令行工具,可以使你用多种方式对 Django 项目进行交互
内层的目录:项目的真正的Python包
__init__.py :一个空文件,它告诉Python这个目录应该被看做一个Python包
settings.py :项目的配置
urls.py :项目的URL声明
wsgi.py :项目与 WSGI 兼容的Web服务器入口

第二步:应用的创建和使用

(1) 创建第一个应用程序

Django 自带一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不
是创建目录。
在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
创建应用的命令:

python3 manage.py startapp bookApp

应用的目录结构如下图 :

python Django框架快速入门教程(后台管理)

 (2) 编写第一个视图函数

打开文件 bookApp/views.py 并放入以下Python代码:

from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("图书管理系统")

(3) 路由规则

在 bookApp 目录中创建一个 URLconf ,创建一个名为 urls.py 。

# bookApp/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
# 当用户访问bookApp应用的主页时, 执行视图函数index,反向根据名称获取url地址;
url(r'^$', views.index, name='index'),
]

根据配置文件 BookManage/settings 可知路由查找的主文件是 BookManage/urls.py , 因此在该文件
添加一条 url 规则:

# BookManage/urls.py
from django.conf.urls import url
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# 当用户访问的url地址以book开头, 请访问bookApp.urls这个url配置文件进行匹配并执行对应
的视图函数.
url(r'^book/', include('bookApp.urls')),
]

include()函数允许引用其他 URLconfs 。

(4) 效果展示

启动服务器

python3 manage.py runserver

python Django框架快速入门教程(后台管理)

访问 url 地址: http:// 127.0.0.1:8000/book/ 如果看到主页内容 图书管理系统 即成功

python Django框架快速入门教程(后台管理)

第三步: 项目的数据库模型

(1). 数据库创建

MariaDB [(none)]> create database BookManage charset=utf8;

(2). 连接 MySQL 数据库配置

在 settings.py 文件中,通过DATABASES项进行数据库设置
Django 支持的数据库包括: sqlite 、 mysql 等主流数据库
Django 默认使用 **SQLite** 数据库
Django数据库设置参考文档
其中ENGINE设置为数据库后端使用。内置数据库后端有:
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'

在 BookManage/settings.py 文件中,通过DATABASES项进行数据库设置:

# .......
# 注释之前的sqlite数据库;
# DATABASES = {
#
'default': {
#
'ENGINE': 'django.db.backends.sqlite3',
#
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#
}
# }
# 添加新的Mysql数据库连接;
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'BookManage',
'USER': 'root',
'PASSWORD': 'westos',
'HOST': 'localhost',
'PORT': '3306',
}
}
# .......
注意: Django 使用 MySQL 数据库需要安装 PyMySQL ,若已经安装请略过。
pip install pymysql

打开 BookManage/__init__.py ,写入以下代码导入 pymysql :

import pymysql
# MySQLdb只支持Python2.*,还不支持3.可以用PyMySQL代替。
pymysql.install_as_MySQLdb()

(2). 创建数据库模型

本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄

图书表结构设计: 表名: Book
图书名称: title
图书发布时间: pub_date
英雄表结构设计: 表名: Hero
英雄姓名: name
英雄性别: gender
英雄简介: hcontent
所属图书: hbook

图书-英雄的关系为一对多

# bookApp/models.py
from django.db import models
# Create your models here.class Book(models.Model):
# 定义属性:默认主键自增id字段可不写
title = models.CharField(max_length=20)
pub_date = models.DateTimeField()
# 定义默认输出格式
def __str__(self):
return "%d" % self.title
# 自定义对应的表名,默认表名:bookApp_book
class Meta:
db_table = "books"
class Hero(models.Model):
name = models.CharField(max_length=20)
gender = models.BooleanField()
content = models.CharField(max_length=100)
Book = models.ForeignKey('Book', on_delete=False)
def __str__(self):
return "%s" % self.name
# 自定义对应的表名,默认表名:bookApp_hero
class Meta:
db_table = "heros"

(3). 生成数据库表

激活模型:编辑 settings.py 文件,将应用加入到 INSTALLED_APPS 中

# BookManage/settings.py
# Application definition
INSTALLED_APPS = [
# .......此处省略
'django.contrib.staticfiles',
# 新添加的app
'bookApp',
]

生成迁移文件:根据模型类生成 sql 语句

python manage.py makemigrations

产生的迁移文件如下:

python Django框架快速入门教程(后台管理)

 执行迁移:执行 sql 语句生成数据表

python manage.py migrate

 数据库中查看数据库表是否创建成功?

$ mysql -uroot -pwestos
MariaDB [(none)]> use BookManage
MariaDB [BookManage]> show tables;
MariaDB [BookManage]> desc books;
+----------+-------------+------+-----+---------+----------------+
| Field
| Type
| Null | Key | Default | Extra
|
+----------+-------------+------+-----+---------+----------------+
| id | int(11)
| title | varchar(20) | NO
| pub_date | datetime
| NO
| NO
| PRI | NULL | auto_increment |
| | NULL | |
| | NULL | |
+----------+-------------+------+-----+---------+----------------+
MariaDB [BookManage]> desc heros;
+---------+--------------+------+-----+---------+----------------+
| Field
| Type
| Null | Key | Default | Extra
|
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| gender | tinyint(1) | NO | | NULL | |
| content | varchar(100) | NO | | NULL | |
| Book_id | int(11) | MUL | NULL | |
| NO
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

(4). 数据库模型基本操作

现在进入交互式的Python shell,并使用 Django 提供的免费 API

python manage.py shell

引入需要的包:

from bookApp.models import Hero, Book

查询所有图书信息:

Book.objects.all()

新建图书信息:

from datetime import datetime
book = Book(title="射雕英雄传", pub_date=datetime(year=1990,month=1,day=10))
book.save()

查找图书信息:

book = Book.objects.get(pk=1)
book.id
book.title
book.pub_date

修改图书信息:

book.title = "天龙八部"
book.save()

删除图书信息:

book.delete()

添加关联对象

# 书籍的创建
book = Book(title="倚天屠龙记", pub_date=datetime(year=1990,month=1,day=10))
book.save()
# 人物的创建
info1 = "峨眉第四代掌门人,先为峨眉派掌门灭绝师太的徒儿,颇获灭绝师太欢心并对她>青睐有加,将峨
眉派镇派之宝“蛾眉九阳功”传给了她,张无忌的追求者之一。"
info2 = "原名敏敏特穆尔,汝阳王(朝廷大将军察罕特穆尔)的女儿,封号“绍敏郡主”,>赵敏是她的汉
名,是从她的封号“绍敏郡主”而来。"
hero1 = Hero(name="周芷若", gender=False, info=info1)
hero2 = Hero(name="赵敏", gender=False, info=info2)
hero1.Book=book
hero2.Book=book
hero1.save()
hero2.save()

获得关联集合:返回当前book对象的所有hero

book.hero_set.all()

有一个 Hero 存在,必须要有一个 Book 对象,提供了创建关联的数据:

book.hero_set.create(name="张无忌",
gender=True,
content="武当派第二代“张五侠”张翠山与天鹰教紫微堂堂主殷素素的儿子")

第四步: 启用后台 Admin 站点管理、

站点分为“内容发布(后台管理)”和“公共访问(前台管理)”两部分
“内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力
的工作。
因此, Django 会根据定义的模型类完全自动地生成管理模块
Django 框架中有一个非常强大的应用功能: 自动管理界面。 常被Web平台管理者使用,去管理整个
Web平台。
默认情况下,在 settings.py 配置文件中 INSTALLED_APPS 包含以下应用程序,为了后续的开发,默
认这些应用程序都是包含在里面的。

python Django框架快速入门教程(后台管理)

 (1). 数据库迁移

使用这些 Django 自带的应用程序,需要我们在数据库中创建一些数据表对应,然后才能使用它们。

python manage.py makemigrations
python manage.py migrate

(2). 创建管理员用户

# 按提示输入用户名、邮箱、密码
python manage.py createsuperuser

启动服务器,通过 “127.0.0.1:8000/admin” 访问,输入上面创建的用户名、密码完成登录
进入管理站点,默认可以对 groups、users 进行管理

python Django框架快速入门教程(后台管理)

 (3). 管理界面本地化

编辑 settings.py 文件,设置编码、时区

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

(4). 自定义模型加入后台管理

打开 bookApp/admin.py 文件,注册模型

from django.contrib import admin
from models import Book
admin.site.register(Book)

刷新管理页面,可以对 Book 的数据进行增删改查操作 ;
问题一: python2 版本中, 如果在 str 方法中返回中文,在修改和添加时会报 ascii 的错误
在 str() 方法中,将字符串末尾添加 “.encode('utf-8')” 进行字符串编码
问题二: 后台管理时, Book管理显示的是英文, 如何变成中文?

python Django框架快速入门教程(后台管理)

# bookApp/models.py
class Book(models.Model):
# ........此处省略
# 自定义对应的表名,默认表名:bookApp_book
class Meta:
db_table = "books"
# 单数时显示的名称
verbose_name = '图书信息'
# 复数时显示的名称
verbose_name_plural = '图书信息'

python Django框架快速入门教程(后台管理)

(5). 自定义管理页面

Django 提供了 admin.ModelAdmin 类
通过定义 ModelAdmin 的子类,来定义模型在 Admin 界面的显示方式

# bookApp/admin.py
from django.contrib import admin
from .models import Book, Hero
# 书籍自定义管理页面
class BookAdmin(admin.ModelAdmin):
list_display = ['pk', 'title', 'pub_date']
list_filter = ['title']
search_fields = ['title']
list_per_page = 10# fields = ['pub_date', 'title']
fieldsets = [('基础信息', {'fields': ['title']}),
('详细信息', {'fields': ['pub_date']}), ]
# 人物自定义管理页面
class HeroAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'gender', 'content']
list_filter = ['name']
search_fields = ['name']
list_per_page = 10
# 关联注册
admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)

 列表页属性性

ist_display:显示字段,可以点击列头进行排序
list_display = ['pk', 'title', 'pub_date']
list_filter:过滤字段,过滤框会出现在右侧
list_filter = ['title']
search_fields:搜索字段,搜索框会出现在上侧
search_fields = ['title']
list_per_page:分页,分页框会出现在下侧
list_per_page = 10

python Django框架快速入门教程(后台管理)

 添加、修改页属性

fields:属性的先后顺序
fields = ['pub_date', 'title']
fieldsets :属性分组, 注意: fields和fieldsets 只能设置一个.
fieldsets = [('基础信息', {'fields': ['title']}),
('详细信息', {'fields': ['pub_date']}), ]

python Django框架快速入门教程(后台管理)

 关联对象

对于 Hero 模型类,有两种注册方式
方式一:与 Book 模型类相同
方式二:关联注册
admin.StackedInline : 内嵌关联注册类
admin.TabularInline : 表格 关联注册类

# bookApp/admin.py
# class HeroInline(admin.TabularInline):
class HeroInline(admin.StackedInline):
model = Hero
extra = 2
class BookAdmin(admin.ModelAdmin):
list_display = ['pk', 'title', 'pub_date']
# .......此处省略部分重复代码
inlines = [HeroInline]

显示效果如下:

python Django框架快速入门教程(后台管理)

 布尔值的显示

发布性别的显示不是一个直观的结果,可以使用方法进行封装
# bookApp/models.py
class Hero(models.Model):
#
.......此处省略部分重复代码
def sex(self):
if self.gender:
return
"男"
else:
return
"女"
在 admin 注册中使用 sex 代替 gender
# bookApp/admin.py
class HeroAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'sex', 'content']

 显示效果如下:

python Django框架快速入门教程(后台管理)

到此这篇关于python Django框架快速入门(后台管理)的文章就介绍到这了,更多相关python Django入门内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
django query模块
Apr 20 Python
Python generator生成器和yield表达式详解
Aug 08 Python
解析python的局部变量和全局变量
Aug 15 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
通过实例解析python and和or使用方法
Nov 14 Python
python 模拟登陆github的示例
Dec 04 Python
Django实现简单的分页功能
Feb 22 Python
Python编写nmap扫描工具
Jul 21 #Python
Django模型层实现多表关系创建和多表操作
Jul 21 #Python
Python基本数据类型之字符串str
Jul 21 #Python
Python中22个万用公式的小结
Jul 21 #Python
python字典的元素访问实例详解
Jul 21 #Python
Opencv实现二维直方图的计算及绘制
python scrapy简单模拟登录的代码分析
Jul 21 #Python
You might like
SONY SRF-M100的电路分析
2021/03/02 无线电
php flush类输出缓冲剖析
2008/10/19 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
php面向对象重点知识分享
2019/09/27 PHP
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
Python的装饰器用法学习笔记
2016/06/24 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
python获取整个网页源码的方法
2020/08/03 Python
python 如何上传包到pypi
2020/12/24 Python
《逃家小兔》教学反思
2014/02/23 职场文书
团购业务员岗位职责
2014/03/15 职场文书
质量月活动总结
2014/08/26 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
Javascript之datagrid查询详解
2021/09/15 Javascript
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫
Nginx 匹配方式
2022/05/15 Servers