目录
MVT设计了解
认识MVT
Django的web设计模型是MVT:
- Model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;
- Template:模板层(也叫表现层)具体来处理页面的显示;
- View:业务逻辑层,处理具体的业务逻辑,它的作用是连通Model 层和 Template
相关的模型可以参考Django MTV和MVC的区别
实际操作
Template:
在Template中创建test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{vaule}}
</body>
</html>
View:
在刚才创建的blog应用目录下的views.py中添加以下代码,使用render将对用值渲染到html页面中
from django.shortcuts import render
def hello_my_django(request):
return render(request,"test.html",{"vaule":"hello my Django"})
路由配置
在djangoProject的urls.py中可以配置路由
4.0之前引入url模块的方式:
from django.conf.urls import url
url(regex,view,name=None)
4.0之后可以直接
from django.urls import path
path('test',views.hello_my_django),
4.0后如果还想用url正则匹配可以使用以下方式引入
from django.urls import re_path as url
或者放到首页path('',views.hello_my_django),
上述 url 的参数解析如下:
- regex,匹配请求路径,用正则表达式表示;
- view,指定 regex 匹配路径所对应的视图函数的名称;
- name,是给 url 地址起个别名,在模板反向解析的时候使用
配置好后测试test路由
Model:
所有的 Model 都必须继承自django.db.models.Model,在blog的models中添加以下内容,class名在ORM框架中对应数据库表中的表名,变量名对应数据库中表的字段,如title等
class Book(models.Model): #创建 book 表
title=models.CharField( max_length=30,unique=True, verbose_name='书名')
public=models.CharField(max_length=50,verbose_name='出版社')
price=models.DecimalField(max_digits=7,decimal_places=2,verbose_name='定价')
def default_price(self):
return '¥30'
retail_price=models.DecimalField(max_digits=7,decimal_places=2,verbose_name='零售价',default=default_price)
def __str__(self):
return "title:%s pub:%s price:%s" % (self.title, self.public, self.price)
class Author(models.Model): #创建作者表
name=models.CharField(max_length=30,verbose_name='姓名')
email=models.EmailField(verbose_name='邮箱')
def __str__(self):
return '作者:%s'%(self.name)
class UserInfo(models.Model): #创建用户信息表
username=models.CharField(max_length=24,verbose_name='用户注册')
password =models.CharField(max_length=24,verbose_name='密码')
然后在终端执行
python manage.py makemigrations python manage.py migrate
可以看到已经创建了对应的三张表
在执行完python manage.py makemigrations后,在应用目录下会有一个migrations目录,记录数据库信息以便以后迁移,可以通过python manage.py sqlmigrate + 应用名 + 编号查看转换对应的sql语句
python manage.py sqlmigrate blog 0001_initial
默认的后台管理模块
上节创建完djangoProject项目后
打开改项目文件夹下的urls.py,发现已经注册了并引入了admin模块
因为没有初始化,所以无法登录
初始化admin模块
python manage.py createsuperuser
遇到报错:
django.db.utils.OperationalError: no such table: auth_user
可以使用 python manage.py migrate 先创建数据库
可以看到数据库中多了这几张表
然后创建管理员账户
python manage.py createsuperuser
这里账户密码为admin/123456
对应表中也会多出相应的记录
完事可以登录了
应用中Admin注册
在应用中修改
from django.contrib import admin
# Register your models here.
from blog.models import Book, Author,UserInfo #这个需要我们自己导入相应的模型类(数据表)
admin.site.register([Book,Author,UserInfo])
启动应用后,可以看到刚才的Book, Author,UserInfo模块已经注册到了管理后台,可以可视化添加数据库记录了
参考: