Django框架快速入门之后台管理admin(书籍管理系统)

一、Django框架介绍

什么是框架?

软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品,
框架的功能类似于 基础设施 ,提供并实现最为 基础的软件架构和体系
通常情况下我们依据框架来实现更为复杂的业务程序开发
二个字,框架就是程序的 骨架

Python 中常见的框架有哪些?

大包大揽 Django 被官方称之为完美主义者的Web框架。
力求精简 web.py 和 Tornado
新生代微框架 Flask 和 Bottle

Django 框架介绍

Django 是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而无需重新创建轮子。免费的和开源的。
被官方称之为完美主义者的Web框架。

二、创建第一个Django项目

在线安装Django,指定版本安装
在终端敲

 pip install django==3.1django-admin startproject BookManage

创建新项目---->选择Django

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

三、应用的创建和使用

terminal窗口输入

python manage.py startapp BookApp

路由配置:设置用户访问某个path时执行的函数(业务逻辑)
在bookApp内新建一个urls.py 会更便于管理

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

随后在 book内编辑urls.py

from django.contrib import admin
from django.urls import path, include
from bookApp.views import indexurlpatterns = [path('admin/', admin.site.urls),path('book/', include('bookApp.urls')),]

视图函数编写,django所有的视图函数接收请求,返回响应
编辑BookApp/views.py

"""
和视图相关的
"""
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
#http://127.0.0.1/login
#http://127.0.0.1/register 根据路由
#http协议:http请求 http响应
def index(request):return HttpResponse("westos-1.图书管理系统")

terminal ---->
python manage.py runserver 打开网站逐个访问

(重点理解)访问过程解析:

浏览器输入 http://127.0.0.1:8000/book 向127.0.0.1的8000端口发起请求,请求path=/book/
Django web服务器的wsgi接收请求, 加载配置文件,读取主路由配置文件book/urls.py
其中内部的include规则找到 bookApp内的urls.py
根据匹配规则找到path=/book/要执行的函数(视图函数)book
执行函数,返回响应并显示在浏览器上

四、项目的数据库模型

ORM对象关系映射

由于开发人员对于sql语句不熟悉,但需要操作,可以通过ORM用面向对象的方式对数据库进行操作。
ORM 对象-关系映射: 用面向对象的方式去操作数据库的创建表以及增删改查等操作

ORM优缺点:
优点:

1.ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句。快速开发,由此而来。
2.可以避免一些新手程序猿写sql语句带来的性能问题。

缺点:

1.性能有所牺牲,不过现在的各种ORM框架都在尝试各种方法,比如缓存,延迟加载登来减轻这个问题。效果很显著。

sqlite数据库建立、导入并管理

编辑 models.py
django框架中,类相当于数据库表,属性相当于数据库的列名称,对象相当于数据库表的一条记录。

"""
数据库相关的文件
"""
from django.db import models# Create your models here.
"""
ORM: OBJECT RELATIONSHIP MAPPING
通过面向对象的方式对数据库增删改查
SQL:
create table tables values (name, varchar(255),age int);
select * from tablename where xxx=xxx;
import
update
delete
"""# 类 数据库的一个表
# 属性 数据库的列名class Book(models.Model):name = models.CharField("书籍名称", max_length=30, unique=True)  # unique=True表示唯一不能重复"""null  是针对数据库而言 null=true 表示数据库该字段可以为空blank 是针对表单 如果 等于true 表示表单填写该字段的时候可以不填 一般都一起写"""description = models.CharField("书籍的详细描述", max_length=200, blank=True, null=True)publish_date = models.DateField("出版日期", null=True, blank=True)sales_count = models.IntegerField("销量", default=0)def __str__(self):return self.name# 自定义对应的表名 默认表明 bookapp_bookclass Meta:db_table = 'books'class Hero(models.Model):GENDER_CHOICES = (('1', '男'),('2', '女'),)name = models.CharField("人物名称", max_length=30)  # unique=True表示唯一不能重复gender = models.IntegerField('性别', choices=GENDER_CHOICES)  # 性别在数据库中用整形储存 1-男 2-女description = models.CharField("人物的详细描述", max_length=200, blank=True, null=True)# 这个人物属于哪本书 book:hero=1:n ===> 外键关联# 如果是一对多关系 外键写在多的一端(在这是写在人的一端)# book属性是该任务属于哪本书籍,级联删除 当书籍删除时,该书籍的人物也被删除book = models.ForeignKey(Book, on_delete=models.CASCADE)def __str__(self):return self.nameclass Meta:db_table = 'heros'

设置setting,激活子应用

python manage.py makemigrations#生成迁移文件

python manage.py migrate #生成数据表

查看方法:
在右边找到数据库 找到+号 选择数据源 选择SQLIite

填写名称 在下面的文件 找到db.sqlite3文件后 测试连接 若出现感叹号 只需安装相应插件即可
选择确定即可看到数据库

数据库模型基本操作

python manage.py shell   交互式管理数据库
pip install ipython  shell中可补齐
from BookApp.models import Book,Hero
# 查看所有书籍
Book.objects.all()
b = Book(title = 'booktest')
b.save()
Book.objects.all()# 查询
b1 = Book.objects.get(id = 1)
b1
b1.title
b1.publish_date
from datetime import date
my_date = date(2021,1,1)
my_date
Book.objects.filter(publish_date__lt=my_date).all() #发布日期小于my_date的书
Book.objects.filter(publish_date__gt=my_date).all() #发布日期大于my_date的书# 书籍信息修改
b1
b1.publish_date = date(2019,1,2)
b1.save()
b1.pub_date# 书籍信息的删除
Book.objects.all()
b1.delete()
Book.objects.all()

一对多关系如何去关联

info1= 'lcf'  #描述
info2= 'shin'
hero1 =Hero(name='meeyeon',gender=1,book= Book.objects.get(name='smy')) #添加信息
hero1.description =info1 #添加描述到hero1中
hero1.save() #保存
hero2 =Hero(name='changbeom',gender=0,book= Book.objects.get(name='smy'))
hero2.description =info2
hero2.save()
Hero.objects.all() #查看
<QuerySet [<Hero: meeyeon>, <Hero: changbeom>]>b= Book.objects.get(name='smy')
b
<Book: smy>b.hero_set.all()  #通过书籍对象查找所有人物信息<QuerySet [<Hero: meeyeon>, <Hero: changbeom>]>h= Hero.objects.filter(name='meeyeon').first()
h.book
Out[52]: <Book: smy>In [53]: h.book.publish_date
Out[53]: datetime.date(2017, 10, 6)

五、admin后台管理

python manage.py createsuperuser # 创建超级管理用户

输入用户名和密码
127.0.0.1:8000/admin 直接访问

设置语言:
settings.py

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

自定义模式加入后台管理

BookApp/admin.py

from django.contrib import admin
# Register your models here.
from  BookApp.models import Book,Hero
admin.site.register(Book)
admin.site.register(Hero)

中文显示添加模块:

BookApp/models.py, 在每一个需要显示的主类中加入参数

class Meta:verbose_name = '图书管理'verbose_name_plural = verbose_name #中文无单复数之分,所以两个相等
class Meta:verbose_name = '人物管理'verbose_name_plural = verbose_name

更改后结果:

列表页信息设置修改

BookApp/admin.py

class BookAdmin(admin.ModelAdmin):# 列表页可以设置的信息# list_display:显示字段,可以点击列头进行排序list_display = ['id', 'title', 'pub_date']# list_filter:过滤字段,过滤框会出现在右侧list_filter = ['title']# search_fields:搜索字段,搜索框会出现在上侧search_fields = ['title']# list_per_page:分页,分页框会出现在下侧list_per_page = 10# inlines = [HeroInline]class HeroAdmin(admin.ModelAdmin):# 列表页可以设置的信息# list_display:显示字段,可以点击列头进行排序list_display = ['id', 'name', 'gender', 'hbook']# list_filter:过滤字段,过滤框会出现在右侧list_filter = ['name', 'hbook']# search_fields:搜索字段,搜索框会出现在上侧search_fields = ['name']# list_per_page:分页,分页框会出现在下侧list_per_page = 10

不要忘记调用修改属性的类

BookApp/admin.py

admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)

fields 修改添加界面属性的先后顺序

BookApp/admin.py

# 添加、修改页属性
# fields:属性的先后顺序
fields = ['name', 'hbook', 'gender', 'content']

关联对象

通常添加一本书以及关联的三个人,通常需要先添加书再添加人
需求:
关联起来,在添加书的时候添加关联的人

BookApp/admin.py

class HeroInline(admin.StackedInline):
#class HeroInline(admin.TabularInline): 两种展示形式model = Heroextra = 2

在BookAdmin类中添加调用,满足其在添加书籍时最少可添加两个关联的人物

inlines = [HeroInline]

即最终的 admin.py为

from django.contrib import admin# Register your models here.
from bookApp.models import Book, Hero#class HeroInline(admin.StackedInline):
class HeroInline(admin.TabularInline):model = Heroextra = 2class BookAdmin(admin.ModelAdmin):list_display = ['id', 'name', 'publish_date', 'sales_count']list_filter = ['publish_date', 'sales_count']search_fields = ['name', 'description']list_per_page = 10inlines = [HeroInline]class HeroAdmin(admin.ModelAdmin):list_display = ['id', 'name', 'gender', 'description']list_filter = ['name']search_fields = ['name', 'description']list_per_page = 10admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)

这样,一个简单的图书管理系统后台管理模块就做好了

Django框架快速入门之后台管理admin(书籍管理系统)相关推荐

  1. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  2. Django 框架快速入门

    1. Django是什么 Django 是一个高级的 Python Web 框架,它最初是加拿大劳伦斯出版集团用于管理旗下新闻网站内容的设计.它鼓励快速开发和清洁,负责 Web 开发的许多麻烦,因此开 ...

  3. python(十四)--Django学习快速入门

    Django学习快速入门 1. 预备知识 1.1 什么是http协议 1.2 MVC模式和MTV模式 1.2.1 MVC 模式 1.2.2 MTV 模式 2. Django框架介绍 2.1 什么是框架 ...

  4. Quartz 框架快速入门(二)

    尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...

  5. Quartz 框架快速入门(四)

    Spring的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务.Spring通过JobDetailBean,Met ...

  6. Quartz 框架快速入门(三)

    在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Schedul ...

  7. 【完结】给新手的12大深度学习开源框架快速入门项目

    文/编辑 | 言有三 这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpen ...

  8. java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】

    第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...

  9. Go语言Web框架:Beego框架快速入门

    文章目录 Beego框架快速入门 1.beego框架了解 2.MVC架构 3.环境搭建 4.beego的项目结构分析 5.Beego快速体验 6.Beego运行流程分析 7.Post案例实现 7.1前 ...

最新文章

  1. js面向对象的五种写法
  2. oracle拼接字符串报错,Oracle 中wmsys.wm_concat拼接字符串,结果过长报错解决
  3. python编程入门第九讲,第九讲作业---函数
  4. 我会铭记这一天:2016年10月25日
  5. python输出时间格式_python中日期和时间格式化输出的方法小结_python
  6. CUDA:在GPU上实现核函数的嵌套以及编译运行
  7. Java运算符及录入
  8. sql替换字符串中的部分字符
  9. ElasticSearch文档检索,分词、精确匹配、多条件
  10. java中怎样显示图片_[Java教程]Java中显示图片的方法
  11. x265 HEVC编码器,基于x264 介绍
  12. 微信公众号菜单栏设置直接打电话拨号一键拨号
  13. 数据结构 散列表 除留余数法 线性探测法解决冲突
  14. 计算机专业英语1500词TXT,电脑专业英语1500词
  15. 奢华运动服饰品牌博格纳中国首家精品店北京开业;乐高集团品牌零售业务在华发展跃上新台阶 | 知消...
  16. 智能AR场景模拟书法临摹系统
  17. 计算机怎么传输信息,局域网信息怎么传输
  18. react中 Ender键 触发事件数(输入框)
  19. IDEA工具-在pannel自己独立下挂一个节点(非标准)
  20. 【强化学习-医疗】用于临床决策支持的深度强化学习:简要综述

热门文章

  1. 嵌入式linux收银机重装系统,收银机重装系统。没有光驱,用U盘怎么装?详细点的。谢了!...
  2. CreateFileMapping MapViewOfFile UnmapViewOfFile函数用法及示例
  3. 卖500元个人版通用权限管理系统组件源码终于引来了下50万C#.NET软件开发订单的大客户...
  4. 自己动手写个聊天机器人吧
  5. 网络与信息安全学习(二)
  6. 热门开源项目:Guns-后台管理系统
  7. 2000套微信微信小程序源码+抖音微信小程序源码附开源代码
  8. 女生学计算机好吗有辐射,电脑辐射对女人有害吗
  9. 中科大MEM工程管理硕士专业考研初试与复试经验分享
  10. jQuery打印插件jqprint,无法打印select下拉框的值