基本流程(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>