00-django | 01-构建博客目录
创建blog
进入到 manage.py
文件所在的目录(即项目根目录)下,运行 pipenv run python manage.py startapp blog
可建立一个 firstblog 应用[1]。 创建完毕后可看到目录结构如下[2]
./
这个目录为根目录,也是项目的容器。
-
manage.py
: 为命令行交互工具[3] -
blog/
:本次的项目名。也就是我创建的这个blog的所有文件存放的父目录 -
settings.py
:该 Django 项目的配置文件[4]。 定义了Django的各种参数和路径以及显示语言等信息。 -
urls.py
: 该 Django 项目的 URL 声明; 也就是网站"目录"。 -
wsgi.py
: 一个 WSGI 兼容的 Web 服务器的入口
这一步只是创建了文件结构,但还没有向Django注册,在setting.py
中修改INSTALLED_APPS
设置
创建数据库模型
django 会把 Python 代码翻译成对应的数据库操作语言,因此我们可以不用直接写数据库的语法。
模型[5]
每个模型都是一个python类,都继承于 django.db.models.Model
。 我们编辑model都在firstblog/models.py
中定义即可
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
# 定义blog的分类
class Category(models.Model):
name = models.CharField(max_length=100)
# 定义文章标签
class Tag(models.Model):
name = models.CharField(max_length=100)
# 定义文章,主要有标题、正文、时间等
class Post(models.Model):
title = models.CharField(max_length=70)
body = models.TextField()
created_time = models.DateTimeField()
modified_time = models.DateTimeField()
excerpt = models.CharField(max_length=200, blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag, blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
- 定义了一个名为
Category
的类,继承自models.Model
类,且该类有个name
属性 - 定义了
Tag
类,有个name
属性 - 定义了
Post
类,有很多属性,其中blank=True
表示允许空值。同时允许一对一的ForeignKey
关联关系,以及多对多的ManyToManyField
关联关系
然后在项目根目录下运行pipenv run python manage.py makemigrations
和pipenv run python manage.py migrate
来写入数据库
django 通过检测应用中
migrations
目录下的文件,得知我们对数据库做了哪些操作,然后它把这些操作翻译成数据库操作语言,从而把这些操作作用于真正的数据库。
若要查看具体数据库命令可以pipenv run python manage.py sqlmigrate firstblog 0001
来查看
setting.py
显示数据库用的是sqlite3。数据库主要功能就是增删查改
操作数据库
增
pipenv run python manage.py shell
打开交互shell
>>> >>> from firstblog.models import Category, Tag, Post
>>> c = Category(name='category Test') # 实例化
>>> print(c)
Category object (None)
>>> c.save() # 存入数据库
>>> t = Tag(name='tag test') #实例化
>>> t.save() #存入数据库
pipenv run python manage.py createsuperuser
用于创建超级用户
取
Tag.objects.all()
或Tag.objects.get()
其中all
会取出所有符合的,而get
只会取1条
改
- 先
get()
- 然后重新赋值
- 最后
save()
即可
删
- 先
get()
-
delete()
即可
https://docs.djangoproject.com/zh-hans/2.2/intro/tutorial01/ ↩
https://www.runoob.com/django/django-first-app.html ↩
https://docs.djangoproject.com/zh-hans/2.1/ref/django-admin/ ↩
https://docs.djangoproject.com/zh-hans/2.1/topics/settings/ ↩
https://docs.djangoproject.com/zh-hans/2.2/topics/db/models/ ↩