Django搭建博客----Model的编写
Django为MTV模式,也就是model、template和views
- model:数据的存取层。负责业务对象和数据库的关系映射(ORM)。
- template:展现层。负责如何把页面展示给用户(html)。
- views:业务逻辑层。负责业务逻辑,并在适当时候调用Model和Template。
我自己的理解就是:·
M:model.py 就是和数据库打交道用的,创建表等操作(和MVC一样)
T:templates 存放HTML文件的
V:View 视图函数(逻辑处理)
接着上节讲到的内容:
- 在iblog的目录下执行:
django-admin startapp article
运行结果如下:
- 写博客首先需要一个作者吧,我们既然写了,肯定不能把作者写成一个固定的数据。那么,我们就要建立一个用户app.
在iblog的目录下执行:django-admin startapp bloguser
,运行结果和上面一样。
然后开始写数据层
model.py
下面的代码写在bloguser/model.py
里
from django.contrib.auth.models import AbstractUser
from django.db import models
class UserProfile(AbstractUser):
author_name = models.CharField(max_length=64, verbose_name='作者名字')
class Meta:
# 建立的表名为UserProfile
db_table = 'UserProfile'
verbose_name = '用户'
verbose_name_plural = verbose_name
# 函数 __str__ 定义当调用对象的 str() 方法时的返回值内容
def __str__(self):
return self.username
这时,千万别忘记在settings.py
文件的INSTALLED_APPS
中,
添加我们新建立的app进行注册,如下:
INSTALLED_APPS = [
''''',
''''',
'bloguser',
]
我们直接继承Django内置的AbstractUser
,减轻了我们的代码压力。
继承AbstractUser
时,需要在settings.py里声明一下.
即增加代码AUTH_USER_MODEL = 'bloguser.UserProfile'
- 生产迁移文件
然后我们生成迁移文件。在控制台输入python manage.py makemigrations bloguser
。
注:后面的app名字bloguser可以不加,当添加时,只对声明的app生产迁移文件
执行完毕后,控制台显示:
Migrations for 'bloguser':
bloguser\migrations\0001_initial.py
- Create model UserProfile
这个时候我们可以发现在bloguser
的migrations
目录下,会多了一个0001_initial.py
文件。
- 数据迁移
然后我们进行数据迁移。在控制台输入python manage.py migrate bloguser
。
控制台会显示如下:
Operations to perform:
Apply all migrations: admin, auth, bloguser, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying bloguser.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying sessions.0001_initial... OK
这时,数据迁移也进行完成了。
这个时候可以根据自己选择的数据库工具进行查看,这里使用的是自带的sqlite3
。这里不再进行讲解,后面我们会提到。
编写article的model
和上面一样,我们完成article的model的编写。
class Article(models.Model):
art_title = models.CharField(max_length=128, verbose_name='文章标题')
author = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='文章作者')
art_body = models.TextField(verbose_name='文章内容')
created_time = models.DateTimeField(auto_now_add=True, verbose_name='写作时间')
# 文章更新时间
updated_time = models.DateTimeField(auto_now=True, verbose_name='最近更新时间')
class Meta:
db_table = 'article'
verbose_name = '文章'
ordering = ('-created_time')
verbose_name_plural = verbose_name
def __str__(self):
return self.art_title
讲到这里,说一下,这些代码虽然可以复制粘贴,但是我并不建议,希望你亲自敲一遍。
每当修改models.py文件,都必须用makemigrations和migrate这两条指令迁移数据。在迁移成功之后,Model的编写就算完成了。
按照刚刚的用户app,进行注册、生成迁移文件,进行数据迁移。
如果你使用的编译器是PyCharm
,并且数据库使用的是sqlite
,那么你只需要双击db.sqlite3,
即可看到刚刚我们生产的数据表,是不是很神奇呢。
如下:
还是建议大家手敲呀!!,别复制。