Django入门(二) 理解Django生命流程周期_django model queryset生命周期

>>> b1 = Book.objects.filter(name="西游记").first()
>>> b1
<Book: 西游记>
>>> b1.pub_date
datetime.date(2000, 1, 1)

  • 删除图书信息:
>>> b1.delete()

  • 添加关联对象
>>> # 书籍的创建
>>> book = Book(name="倚天屠龙记",pub_date=date(2000,1,1))
>>> book.save()
>>> # 人物的创建
>>> hero1 = Hero(name="周芷若", gender=2,content="info....")
>>> hero1.save()
>>> hero1.book_id = book
>>> hero1.book_id
<Book: 倚天屠龙记>

  • 获得关联集合:返回当前book对象的所有hero
book.hero_set.all()

  • 筛选
>>> books = Book.objects.filter(name__contains="红")
>>> books
<QuerySet [<Book: 红楼梦>]>

自定义模型加入后台管理

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

from django.contrib import admin
from bookApp.models import  Book,Hero
# 自定义后台站点管理的拓展阅读: https://docs.djangoproject.com/zh-hans/3.1/ref/contrib/admin/
# Register your models here.
admin.site.register([Book,Hero])

在这里插入图片描述

  • 刷新管理页面,可以对 Book 的数据进行增删改查操作 ;
  • 后台管理时, Book管理显示的是英文, 如何变成中文?

在这里插入图片描述

# bookApp/models.py
    class Meta:
        # 单数时显示的名称
        verbose_name = "图书管理"
        # 复数时显示的名称
        verbose_name_plural = verbose_name

效果:
在这里插入图片描述

自定义管理页面

  • Django 提供了 admin.ModelAdmin 类
  • 通过定义 ModelAdmin 的子类,来定义模型在 Admin 界面的显示方式
from django.contrib import admin
from bookApp.models import  Book,Hero
# 自定义后台站点管理的拓展阅读: https://docs.djangoproject.com/zh-hans/3.1/ref/contrib/admin/
# Register your models here.
class HeroInline(admin.StackedInline):
    model = Hero
    extra = 3


class BookAdmin(admin.ModelAdmin):
    # 列表页展示的设置
    list_display =  ['id', 'name', 'pub\_date']
    list_filter = ['pub\_date']
    search_fields = ['name']
    list_display_links = ['name']
    list_per_page =  5
    inlines =  [HeroInline]

class HeroAdmin(admin.ModelAdmin):
    # 列表页展示的设置
    list_display =  ['id', 'name', 'gender']
    list_filter = ['gender']
    search_fields = ['name', 'content']
    list_display_links = ['name']
    list_per_page =  5
    # 增加和编辑页的设置
    fieldsets = [('必填信息', {'fields': ['name', 'book\_id']}),
                 ('选填信息', {'fields': ['gender', 'content']}), ]


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

最终效果展示

  • 书籍筛选
    在这里插入图片描述
  • 人物筛选
    在这里插入图片描述
  • 添加图书信息
    在这里插入图片描述
  • 添加人物信息
    在这里插入图片描述
  • 分页显示
    在这里插入图片描述

列表页属性性

list_display:显示字段,可以点击列头进行排序
list_filter:过滤字段,过滤框会出现在右侧
search_fields:搜索字段,搜索框会出现在上侧
list_per_page:分页,分页框会出现在下侧

添加、修改页属性

fields:属性的先后顺序
fieldsets :属性分组, 注意: fields和fieldsets 只能设置一个.

    fieldsets = [('必填信息', {'fields': ['name', 'book\_id']}),
                 ('选填信息', {'fields': ['gender', 'content']}), ]

关联对象

对于 Hero 模型类,有两种注册方式

  • 方式一:与 Book 模型类相同
  • 方式二:关联注册
    admin.StackedInline : 内嵌关联注册类
    admin.TabularInline : 表格 关联注册类
class HeroInline(admin.StackedInline):
    model = Hero
    extra = 3

class BookAdmin(admin.ModelAdmin):
list_display = ['pk', 'title', 'pub\_date']
# .......此处省略部分重复代码
inlines = [HeroInline]

Django快速入门: 前台管理

第一步: URLconf 路由管理

  • 在 Django 中,定义 URLconf 包括正则表达式、视图两部分 。
  • Django 使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图 。
  • 注意:只匹配路径部分,即除去域名、参数后的字符串 。
  • 在主配置文件中添加子配置文件,使主 urlconf 配置连接到子模块的 urlconf 配置文件 。

主配置文件配置如下, 已经配置过, 可以忽略此步骤:

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

bookApp 子应用的子配置文件如下:

# bookApp/urls.py
urlpatterns = [
# 当用户访问bookApp应用的主页时, 执行视图函数index,反向根据名称获取url地址;
path(r'', views.index, name='index'),
    # 显示书籍的详情页, 接收一个int值并赋值给id
path(r'<int:id>/', views.detail, name='detail'),
]

第二步: 视图函数处理业务逻辑

  • 在 Django 中,视图对WEB请求进行回应( response )。
  • 视图接收 reqeust 请求对象作为第一个参数,包含了请求的信息 。
  • 视图函数就是一个Python函数,被定义在 views.py 中 。
  • 定义完成视图后,需要配置 urlconf ,否则无法处理请求。
# bookApp/views.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("图书管理系统")

访问http://127.0.0.1/book查看效果

编辑 views.py 文件,在方法中调用模板 :

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
from bookApp.models import Book
# 视图:对用户的请求(request)进行业务逻辑操作,最总返回给用户响应(reponse)
def index(request):
    books = Book.objects.all()
    #print("用户请求的路径:",request.path)
    #return HttpResponse(books)
    # 渲染:将上下文context{'books':books}填充到book/index.html代码中
    return render(request,'book/index.html',{'books':books})
def detail(request, id):
    """书籍详情页信息"""
    book = Book.objects.filter(id=id).first()
    heros = book.hero_set.all()
    return render(request, 'book/detail.html',
                  {'book': book, 'heros': heros})

等待模板的代码完善后, 再进行测试。

第三步: 模板管理实现好看的HTML页面
作为Web 框架, Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。
模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。
(1) 模板引擎配置
创建模板的目录如下图:
在这里插入图片描述

# index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
        <h1 style="color:red">图书管理系统</h1>
</body>
</html>

再次访问测试
在这里插入图片描述
这里我们不能只是出现一个名字。我们要出现数据列表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 style="color:red">图书管理系统</h1>
<ul>
    {% for book in books %}
    <li>{{ book.name }}</li>
    {% endfor %}
</ul>

</body>
</html>

在这里插入图片描述
等待模板的代码完善后, 再进行测试。

(2) 模板语法: 变量
变量输出语法

{ { var } }

当模版引擎遇到一个变量,将计算这个变量,然后将结果输出。
变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。
当模版引擎遇到点(“.”),会按照下列顺序查询:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
img

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-gHtis5zx-1712653797989)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值