Django 博客

来源:互联网 发布:淘宝店铺转让流程图 编辑:程序博客网 时间:2024/06/05 19:48

创建模型

观察csdn的博客界面,一篇博客通常有标题,作者,内容,摘要,访问数,创建时间,修改时间,标签,类别等等。
其中一篇文章对应一个类别,一个作者,而对应多个标签。

创建相关模型。

from django.contrib.auth.models import Userfrom django.db import modelsfrom django.utils import timezoneclass Category(models.Model):    name = models.CharField(max_length=100)    def __str__(self):        return self.nameclass Tag(models.Model):    name = models.CharField(max_length=100)    def __str__(self):        return self.nameclass Post(models.Model):    title = models.CharField(max_length=100)    body = models.TextField()    #default参数指定创建时的默认值,这里为timezone.now方法    #也可以指定auto_now_add=True,与default=timezone.now作用相似    #但是设置了auto_now_add后就不可编辑了,因此此处使用default参数    created_time = models.DateTimeField(default=timezone.now)    #修改时间,设置auto_now参数为True,代表每次修改都将时间设置为最新    modified_time = models.DateTimeField(auto_now=True)    excerpt = models.CharField(max_length=200, blank=True)    views = models.PositiveIntegerField(default=0)    #ForeignKey代表一对一关系    author = models.ForeignKey(User)    category = models.ForeignKey(Category)    #ManyToManyField代表一对多关系    tags = models.ManyToManyField(Tag, blank=True)    def __str__(self):        return self.title    class Meta:        #默认按创建时间降序,不带-号代表升序        ordering = ['-created_time']

生成迁移文件

创建了新的模型后,需要生成迁移文件,用于生成对应的数据库表。
执行python manage.py makemigrations

正常情况下控制台输出

Migrations for 'blog':  blog\migrations\0001_initial.py    - Create model Category    - Create model Post    - Create model Tag    - Add field tags to post

执行完命令后,生成了blog\migrations\0001_initial.py
如果使用了git等版本管理系统,需要把迁移文件也提交上去。

迁移数据

如上篇博客一样,执行python manage.py migrate
但是这里迁移的是自己创建的模型的表。

输出如下

Operations to perform:  Apply all migrations: admin, auth, blog, contenttypes, sessionsRunning migrations:  Applying blog.0001_initial... OK

迁移完成后,查看数据库db.sqlite3,会发现多了blog_post、blog_tag、blog_category 和blog_post_tags这几张表。默认的表明是<app名>_<模型名>,如果自定义的话,只需要指定模型里Meta类的db_table字段。

管理迁移文件

执行python manage.py,可以看到有好多命令,其中有些命令可以管理迁移文件。

python manage.py showmigrations
显示所有的迁移文件

python manage.py sqlmigrate
显示迁移文件所对应的sql语句
比如上面生成的blog\migrations\0001_initial.py
可以使用python manage.py sqlmigrate blog 0001

python manage.py squashmigrations
合并迁移文件,如果模型的改动太多,生成了多个迁移文件,可以使用的这个命令进行合并

创建模型实例

创建了模型之后,就可以手动在命令行里创建实例了。
推荐使用IPython命令行,安装方法pip3 intall ipython

执行python manage.py shell
导入要用的模型类。

from blog.models import Post, Tag, Categoryfrom django.contrib.auth.models import User

就可以开始创建实例了。

tag = Tag.objects.create(name='tag1')cat = Category.objects.create(name='cat1')user = User.objects.first()post = Post.objects.create(title="title",excerpt="summary",body="content",author=user,category=cat)post.tags.add(tag)

具体怎么使用模型API请查阅官方文档,模型API使用教程

同时也可以在后台管理界面添加模型实例,只需要在web\blog\admin.py里将模型就行注册。

from django.contrib import adminfrom blog.models import Post, Category, Tagadmin.site.register(Post)admin.site.register(Category)admin.site.register(Tag)

重新启动服务器后,进入管理界面,就可以发现多出了blog相关的管理界面,然后就可以对自定义的模型增删改查了。

本文相关源码

原创粉丝点击