創(chuàng)建blog
進(jìn)入到 manage.py
文件所在的目錄(即項(xiàng)目根目錄)下糙捺,運(yùn)行 pipenv run python manage.py startapp blog
可建立一個(gè) firstblog 應(yīng)用^[https://docs.djangoproject.com/zh-hans/2.2/intro/tutorial01/]盔腔。 創(chuàng)建完畢后可看到目錄結(jié)構(gòu)如下^[https://www.runoob.com/django/django-first-app.html]
./
這個(gè)目錄為根目錄杰扫,也是項(xiàng)目的容器土思。
-
manage.py
: 為命令行交互工具^(guò)[https://docs.djangoproject.com/zh-hans/2.1/ref/django-admin/] -
blog/
:本次的項(xiàng)目名。也就是我創(chuàng)建的這個(gè)blog的所有文件存放的父目錄 -
settings.py
:該 Django 項(xiàng)目的配置文件^[https://docs.djangoproject.com/zh-hans/2.1/topics/settings/]官套。 定義了Django的各種參數(shù)和路徑以及顯示語(yǔ)言等信息蜀备。 -
urls.py
: 該 Django 項(xiàng)目的 URL 聲明; 也就是網(wǎng)站"目錄"。 -
wsgi.py
: 一個(gè) WSGI 兼容的 Web 服務(wù)器的入口
這一步只是創(chuàng)建了文件結(jié)構(gòu)杖小,但還沒(méi)有向Django注冊(cè)肆汹,在setting.py
中修改INSTALLED_APPS
設(shè)置
創(chuàng)建數(shù)據(jù)庫(kù)模型
django 會(huì)把 Python 代碼翻譯成對(duì)應(yīng)的數(shù)據(jù)庫(kù)操作語(yǔ)言抡柿,因此我們可以不用直接寫數(shù)據(jù)庫(kù)的語(yǔ)法音念。
模型
每個(gè)模型都是一個(gè)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)
# 定義文章標(biāo)簽
class Tag(models.Model):
name = models.CharField(max_length=100)
# 定義文章扫腺,主要有標(biāo)題硼啤、正文、時(shí)間等
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)
- 定義了一個(gè)名為
Category
的類斧账,繼承自models.Model
類谴返,且該類有個(gè)name
屬性 - 定義了
Tag
類,有個(gè)name
屬性 - 定義了
Post
類咧织,有很多屬性嗓袱,其中blank=True
表示允許空值。同時(shí)允許==一對(duì)一==的ForeignKey
關(guān)聯(lián)關(guān)系习绢,以及==多對(duì)多==的ManyToManyField
關(guān)聯(lián)關(guān)系
然后在項(xiàng)目根目錄下運(yùn)行pipenv run python manage.py makemigrations
和pipenv run python manage.py migrate
來(lái)寫入數(shù)據(jù)庫(kù)
django 通過(guò)檢測(cè)應(yīng)用中
migrations
目錄下的文件渠抹,得知我們對(duì)數(shù)據(jù)庫(kù)做了哪些操作,然后它把這些操作翻譯成數(shù)據(jù)庫(kù)操作語(yǔ)言闪萄,從而把這些操作作用于真正的數(shù)據(jù)庫(kù)梧却。
若要查看具體數(shù)據(jù)庫(kù)命令可以pipenv run python manage.py sqlmigrate firstblog 0001
來(lái)查看
setting.py
顯示數(shù)據(jù)庫(kù)用的是sqlite3。數(shù)據(jù)庫(kù)主要功能就是增刪查改
操作數(shù)據(jù)庫(kù)
增
pipenv run python manage.py shell
打開交互shell
>>> >>> from firstblog.models import Category, Tag, Post
>>> c = Category(name='category Test') # 實(shí)例化
>>> print(c)
Category object (None)
>>> c.save() # 存入數(shù)據(jù)庫(kù)
>>> t = Tag(name='tag test') #實(shí)例化
>>> t.save() #存入數(shù)據(jù)庫(kù)
pipenv run python manage.py createsuperuser
用于創(chuàng)建超級(jí)用戶
取
Tag.objects.all()
或Tag.objects.get()
其中all
會(huì)取出所有符合的败去,而get
只會(huì)取1條
改
- 先
get()
- 然后重新賦值
- 最后
save()
即可
刪
- 先
get()
-
delete()
即可