经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
python Django框架快速入门教程(后台管理)
来源:jb51  时间:2021/7/19 13:31:25  对本文有异议

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 到您要存储代码的目录,然后运行以下命令:

  1. django-admin startproject BookManage

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

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

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

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

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

  1. python3 manage.py startapp bookApp

应用的目录结构如下图 :

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

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

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

(3) 路由规则

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

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

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

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

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

(4) 效果展示

启动服务器

  1. python3 manage.py runserver

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

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

(1). 数据库创建

  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项进行数据库设置:

  1. # .......
  2. # 注释之前的sqlite数据库;
  3. # DATABASES = {
  4. #
  5. 'default': {
  6. #
  7. 'ENGINE': 'django.db.backends.sqlite3',
  8. #
  9. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  10. #
  11. }
  12. # }
  13. # 添加新的Mysql数据库连接;
  14. DATABASES = {
  15. 'default': {
  16. 'ENGINE': 'django.db.backends.mysql',
  17. 'NAME': 'BookManage',
  18. 'USER': 'root',
  19. 'PASSWORD': 'westos',
  20. 'HOST': 'localhost',
  21. 'PORT': '3306',
  22. }
  23. }
  24. # .......
  25. 注意: Django 使用 MySQL 数据库需要安装 PyMySQL ,若已经安装请略过。
  26. pip install pymysql

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

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

(2). 创建数据库模型

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

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

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

  1. # bookApp/models.py
  2. from django.db import models
  3. # Create your models here.class Book(models.Model):
  4. # 定义属性:默认主键自增id字段可不写
  5. title = models.CharField(max_length=20)
  6. pub_date = models.DateTimeField()
  7. # 定义默认输出格式
  8. def __str__(self):
  9. return "%d" % self.title
  10. # 自定义对应的表名,默认表名:bookApp_book
  11. class Meta:
  12. db_table = "books"
  13. class Hero(models.Model):
  14. name = models.CharField(max_length=20)
  15. gender = models.BooleanField()
  16. content = models.CharField(max_length=100)
  17. Book = models.ForeignKey('Book', on_delete=False)
  18. def __str__(self):
  19. return "%s" % self.name
  20. # 自定义对应的表名,默认表名:bookApp_hero
  21. class Meta:
  22. db_table = "heros"

(3). 生成数据库表

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

  1. # BookManage/settings.py
  2. # Application definition
  3. INSTALLED_APPS = [
  4. # .......此处省略
  5. 'django.contrib.staticfiles',
  6. # 新添加的app
  7. 'bookApp',
  8. ]

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

  1. python manage.py makemigrations

产生的迁移文件如下:

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

  1. python manage.py migrate

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

  1. $ mysql -uroot -pwestos
  2. MariaDB [(none)]> use BookManage
  3. MariaDB [BookManage]> show tables;
  4. MariaDB [BookManage]> desc books;
  5. +----------+-------------+------+-----+---------+----------------+
  6. | Field
  7. | Type
  8. | Null | Key | Default | Extra
  9. |
  10. +----------+-------------+------+-----+---------+----------------+
  11. | id | int(11)
  12. | title | varchar(20) | NO
  13. | pub_date | datetime
  14. | NO
  15. | NO
  16. | PRI | NULL | auto_increment |
  17. | | NULL | |
  18. | | NULL | |
  19. +----------+-------------+------+-----+---------+----------------+
  20. MariaDB [BookManage]> desc heros;
  21. +---------+--------------+------+-----+---------+----------------+
  22. | Field
  23. | Type
  24. | Null | Key | Default | Extra
  25. |
  26. +---------+--------------+------+-----+---------+----------------+
  27. | id | int(11) | NO | PRI | NULL | auto_increment |
  28. | name | varchar(20) | NO | | NULL | |
  29. | gender | tinyint(1) | NO | | NULL | |
  30. | content | varchar(100) | NO | | NULL | |
  31. | Book_id | int(11) | MUL | NULL | |
  32. | NO
  33. +---------+--------------+------+-----+---------+----------------+
  34. 5 rows in set (0.00 sec)

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

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

  1. python manage.py shell

引入需要的包:

  1. from bookApp.models import Hero, Book

查询所有图书信息:

  1. Book.objects.all()

新建图书信息:

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

查找图书信息:

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

修改图书信息:

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

删除图书信息:

  1. book.delete()

添加关联对象

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

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

  1. book.hero_set.all()

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

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

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

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

 (1). 数据库迁移

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

  1. python manage.py makemigrations
  2. python manage.py migrate

(2). 创建管理员用户

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

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

 (3). 管理界面本地化

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

  1. LANGUAGE_CODE = 'zh-Hans'
  2. TIME_ZONE = 'Asia/Shanghai'

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

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

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

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

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

(5). 自定义管理页面

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

  1. # bookApp/admin.py
  2. from django.contrib import admin
  3. from .models import Book, Hero
  4. # 书籍自定义管理页面
  5. class BookAdmin(admin.ModelAdmin):
  6. list_display = ['pk', 'title', 'pub_date']
  7. list_filter = ['title']
  8. search_fields = ['title']
  9. list_per_page = 10# fields = ['pub_date', 'title']
  10. fieldsets = [('基础信息', {'fields': ['title']}),
  11. ('详细信息', {'fields': ['pub_date']}), ]
  12. # 人物自定义管理页面
  13. class HeroAdmin(admin.ModelAdmin):
  14. list_display = ['id', 'name', 'gender', 'content']
  15. list_filter = ['name']
  16. search_fields = ['name']
  17. list_per_page = 10
  18. # 关联注册
  19. admin.site.register(Book, BookAdmin)
  20. admin.site.register(Hero, HeroAdmin)

 列表页属性性

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

 添加、修改页属性

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

 关联对象

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

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

显示效果如下:

 布尔值的显示

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

 显示效果如下:

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号