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 相关文章推荐
Python实现替换文件中指定内容的方法
Mar 19 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
windows下numpy下载与安装图文教程
Apr 02 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
python实现最速下降法
Mar 24 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
Pycharm调试程序技巧小结
Aug 08 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
python中time tzset()函数实例用法
Feb 18 Python
python实现的人脸识别打卡系统
May 08 Python
Python如何配置环境变量详解
May 18 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
php验证是否是md5编码的简单代码
2014/04/01 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
小程序自定义日历效果
2018/12/29 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
linux 下实现python多版本安装实践
2014/11/18 Python
python查看微信好友是否删除自己
2016/12/19 Python
Python输出带颜色的字符串实例
2017/10/10 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
台湾家适得:Homeget
2019/02/11 全球购物
校园安全检查制度
2014/02/03 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
付款承诺函范文
2015/01/21 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
升学宴学生致辞
2015/09/29 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
html form表单基础入门案例讲解
2021/07/21 HTML / CSS