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

本文详细介绍了Django框架的入门步骤,包括创建项目、应用、数据库模型ORM和admin后台管理。通过实例展示了如何使用Django创建图书管理系统,涉及视图函数、路由配置、模型类以及数据库操作。此外,还讲解了如何通过admin后台进行数据管理和一对多关系的关联,并实现了自定义后台管理界面。
摘要由CSDN通过智能技术生成


一、Django框架介绍

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


二、创建第一个Django项目

创建新项目---->选择Django
在这里插入图片描述
会自动安装Django
如网速过慢则需要修改pip源
修改pip源:
在这里插入图片描述
点击+号
在这里插入图片描述
再点击Manage Repositories
添加清华源(东西较全)或豆瓣源(速度较快)
在这里插入图片描述
再次创建即可发现django安装速度加快。

测试:
terminal ----> python manage.py runserver 6789 运行Django
进入网页: http://127.0.0.1:6789/
在这里插入图片描述

三、应用的创建和使用

terminal窗口输入

python manage.py startapp BookApp

在这里插入图片描述
左边Project下的djangoproject

路由配置:设置用户访问某个path时执行的函数(业务逻辑)
编辑urls.py

from BookApp.views import index, login, logout, register
# 路由配置:设置用户访问某个path时执行的函数(业务逻辑)
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('login/', login),
    path('register/', register),
    path('logout/', logout),
]

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

from django.http import HttpRequest, HttpResponse
# Create your views here.

# 视图函数(处理逻辑):django所有的视图函数接收请求,返回响应
def index(request):
    return HttpResponse('书籍管理系统')

def login(request):
    return HttpResponse('登陆')

def logout(request):
    return HttpResponse('注销')

def register(request):
    return HttpResponse('注册')

terminal ---->
python manage.py runserver 6789 打开网站逐个访问
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

四、项目的数据库模型

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.
from django.db import models

# Create your models here.
# 疑问?数据库操作是通过sql语句执行的,为什么这里没有看到sql语句呢?
"""
需求:
    图书Book有2列信息:title,pub_date
    id    title    pub_date
    1       xxx     xx-xx-xx

"""


# 类->数据库表
class Book(models.Model):
    # 属性 -> 数据库的列名称
    title = models.CharField('图书名称', max_length=100)
    # auto_now=True,每次save时自动更新时间,auto_now_add=True,新建时自动生成时间,后续不会修改
    pub_date = models.DateField('图书发布时间', auto_now_add=True)
    change_time = models.DateTimeField('最后一次更改时间', auto_now=True)

    def __str__(self):
        return self.title

    # 对象->数据库表的一条记录: b = Book(title='xxx')


class Hero(models.Model):
    gender_chioce = (
        (1, '男'),
        (2, '女'),
        (0, '其他'),
    )
    name = models.CharField("人物名称", max_length=20)
    gender = models.IntegerField("性别", choices=gender_chioce)
    content = models.CharField("人物描述", max_length=100)
    # 所属图书-外键关联, 书籍:人物=1:N(一对多关系,外键写在多的一端)
    hbook = models.ForeignKey(Book, on_delete=models.CASCADE)  # 级连删除

    def __str__(self):
        return self.name

设置setting,激活子应用

在这里插入图片描述

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

在这里插入图片描述

python manage.py migrate #生成数据表
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.pub_date
from datetime import date
my_date = date(2021,1,1)
my_date
Book.objects.filter(pub_date__lt=my_date).all() #发布日期小于my_date的书
Book.objects.filter(pub_date__gt=my_date).all() #发布日期大于my_date的书

# 书籍信息修改
b1
b1.pub_date = date(2019,1,2)
b1.save()
b1.pub_date

# 书籍信息的删除
Book.objects.all()
b1.delete()
Book.objects.all()


一对多关系如何去关联

在这里插入图片描述

在这里插入图片描述

五、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):
    model = Hero
    extra = 2

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

inlines = [HeroInline]

在这里插入图片描述
在这里插入图片描述
这样,一个简单的图书管理系统后台管理模块就做好了
测试:
添加一本书及其关联任务。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值