Django--(后台管理 小说书籍项目)

基本流程(MTV)

V:

  • 视图views:接受请求,逻辑处理,调用数据,输出响应
  • 配置url:在自己的应用中配置path()

M:

  • 模型model:负责与数据库交互
  • 面向对象:模型对象,列表
  • 定义模型类:指定属性及类型,以确定表的结构,迁移
  • 后台管理:创建管理员,启动服务器,admin,注册admin.py

T:

  • 模板Template
  • 加载:读取文件的内容代内存
  • 渲染

1.创建项目,配置setting.py

2.models.py写入数据库表模型

from django.db import models

# Create your models here.
#书籍类
class BookInfo(models.Model):
    #书名
    btitle=models.CharField(max_length=20)
    #时间
    bpub_date=models.DateTimeField()
    # 显示书名
    def __str__(self):
        return self.btitle
#人物
class HeroInfo(models.Model):
    #人物名字
    haname=models.CharField(max_length=10)
    #性别
    hgender=models.BooleanField()
    #简介
    hcontent=models.CharField(max_length=1000)
    #外键 书籍名下
    hbook=models.ForeignKey('BookInfo',on_delete=None,null=True)
    #显示名字
    def __str__(self):
        return self.haname

3.admin.py写入后台管理代码

list_display=[]:显示字段,可以点击列头进行排序,先后顺序决定显示顺序

list_filter=[]:过滤字段,过滤框显示在右侧

search_fields=[]:搜索字段,搜索框出现在上方

list_per_page= :分页,下方显示分页框

添加、修改页属性:

    fields:属性的先后顺序

     fieldsets:属性分组

from django.contrib import admin

# Register your models here.
from .models import *
#关联对象嵌入
#实现效果 在输入书名时 可以在下面接着输入英雄信息
# 也可以使用admin.TabularInline呈现不同的嵌入格式
class HeroIndoInline(admin.StackedInline):
    #继承HeroInfo
    model=HeroInfo
    #嵌入3个form表单
    extra=3
#admin管理
class BookInfoAdmin(admin.ModelAdmin):
    #显示字段
    list_display = ["id",'btitle','bpub_date']
    #过滤
    list_filter =['btitle']
    #搜索框
    search_fields = ['btitle']
    #分页
    list_per_page = 1
    #修改时分组
    fieldsets = [('base',{'fields':['btitle']}),('super',{'fields':['bpub_date']})]
    #嵌入
    inlines=[HeroIndoInline]
#需要注册来显示表信息
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo)

运行呈现效果

4.简单的页面

views.py

from django.shortcuts import render
from django.http import *
from django.template import RequestContext,loader
from .models import *
# Create your views here.
def index(request):
    # temp=loader.get_template('booktest/index.html')
    # return HttpResponse(temp.render())

    #通过视图给页面传数据
    #获取数据库中的所有书名
    booklist = BookInfo.objects.all()
    context={'list':booklist}
    return render(request,'booktest/index.html',context)
def show(request,id):#此处必须有两个参数
    #获取id
    book=BookInfo.objects.get(pk=id)
    #获取book获得的id人物表
    herolist=book.heroinfo_set.all()
    context={'list':herolist}
    return render(request,'booktest/show.html',context)

urls.py

from django.urls import path
from hero_user.views import *


urlpatterns=[
    path('',index),
    #获取整数语法
    path('<int:id>',show),
]

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
{#遍历所有获取到的书名然后显示#}
{% for book in list %}

<li><a href="{{ book.id }}">{{ book.btitle }}</a></li>

{% endfor %}
</ul>

</body>
</html>

show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
    {% for hero in list  %}
    <li>{{ hero.haname }}</li>
    {% endfor %}

</ul>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值