从零开始的django开发生活之个人博客网站(1)
一、构建个人博客网站
1、简单构建
评论为什么独立出来?
评论比较通用,可以评论回复,应用于多个方面,不仅仅局限于博客
1)博客
博文、博客分类、博客标签
2)用户
功能模块约等于Django App
2、开启本地虚拟环境
隔开 python项目的运行环境
1)避免多个项目之间python库的冲突
2)完整便捷导出python库的列表
pip install virtualenv
3、virtualenv的使用方法
在自定义目录,cmd环境下:
创建:virtualenv<虚拟环境名称>
启动:Scriptsactivate
退出:deactivate
4、初步创建blog应用
cmd进入虚拟环境中,创建项目django-admin startproject mysite,
创建应用名称django-admin startapp blog
1)编写models
博文+博客分类
1.一篇博客一种分类
2.一篇博客多种分类
这里选择前面一种
from django.db import models from django.contrib.auth.models import User class BlogType(models.Model): type_name = models.CharField(max_length=15) class Blog(models.Model): title = models.CharField(max_length=50) blog_type = models.ForeignKey(BlogType, on_delete=DO_NOTHING) content = models.TextField() author = models.ForeignKey(User, on_delete=models.DO_NOTHING) created_time = models.DateTimeField(auto_now_add=True) last_updated_time = models.DateTimeField(auto_now_add=True)
在blog–>models.py写入如上代码,其中Blog中blog_type和author分别关联到外部的两张表(注意这两张表前面都要有声明,所以blog_type才在前面)
2)数据迁移(系统模型)
编写models之后别忘记terminal中执行python manage.py migrate进行数据迁移,之后数据迁移之后数据库才会生成auth表,也就是系统管理员,这样才能创建超级管理员,但此时models中的数据并没有迁移,因为我们尚未在settings中注册app
3)创建超级管理员
python manage.py createsuperuser,依照步骤提示即可
4)注册app
打开项目文件夹mysite,进入settings.py,在INSTAllED_APP末尾加上blog
5)数据迁移(自定义模型)
python manage.py makemigrations(形成数据迁移文件)
python manage.py makemigrate(同步数据库)
6)定制后台
在admin.py中写入
from django.contrib import admin from .models import BlogType, Blog @register(BlogType) class BlogTypeAdmin(admin.ModelAdmin): list_display = ("id", "type_name") @register(Blog) class BlogAdmin(admin.ModelAdmin): list_display = ("title", "type_name", "author", "created_time", "last_updated_time")
后台界面如要改成中文,可在settings中LANGUAGE_CODE内容改为zh-Hans(意思就是中-汉简)
7)添加对象
随意添加几种type_name,但是在我们添加博客时却发现,后台显示的type_name并不时我们想要的,二是,object(1),object(2),诸如此类,这时候需要我们修改一下models,改变显示在前端的字符内容需要用到方法__str__,在model.py中写入
class BlogType(models.Model): type_name = models.CharField(max_length=15) def __str__(self): return self.type_name class Blog(models.Model): title = models.CharField(max_length=50) blog_type = models.ForeignKey(BlogType, on_delete=models.DO_NOTHING) content = models.TextField() author = models.ForeignKey(User, on_delete=models.DO_NOTHING) created_time = models.DateTimeField(auto_now_add=True) last_updated_time = models.DateTimeField(auto_now_add=True) def __str__(self): return "<Blog: %s>" % self.title
注意str前后分别有两个下划线
5、pip一键导出和安装(拓展)
pip freeze > requirements.txt
pip install -r requirements.txt
暂且记下,方便后面部署
ps:以上代码要能很熟练打出来,噼里啪啦一顿操作就能写出来那种!