新手學習——用django搭建個人博客_day2

一、模型設計

任何一個產品,最開始應該就是設計數據模型,模型設計好一般就不會輕易去修改它了,但是在此處,我們暫時不考慮用戶登錄評論這些,只考慮博客展示需要的模型。對應的表應該爲以下:
博客:標題 作者 分類 標籤 創建時間 最後修改時間 摘要 正文 博客插圖等
作者表: 其實也就是用戶表,django有內置的User模型
分類: 分類名稱
標籤: 標籤名稱
基於以上的模型設計,建立以下的模型代碼:
website/blog/models.py

from django.db import models
from django.contrib.auth.models import User  # 導入內建的User模型,之後方便用戶認證等。博客就可以快速加入用戶登錄註冊認證等功能。


class Categorys(models.Model):
    category_name = models.CharField(max_length=128, verbose_name='博客分類')

   def __str__(self):
       return self.category_name
	
    class Meta:
        verbose_name = '博客分類'
        verbose_name_plural = '博客分類'

class Tags(models.Model):
    tag_name = models.CharField(max_length=128, verbose_name='博客標籤')

    def __str__(self):
        return self.tag_name

    class Meta:
        verbose_name = '博客標籤'
        verbose_name_plural = '博客標籤'


class Article(models.Model):
    title = models.CharField(max_length=128, verbose_name='標題')
    auth = models.ForeignKey(User, verbose_name='作者')  # 作者和文章是一對多的關係,所以這邊使用ForeignKey用於關聯查詢
    categorys = models.ManyToManyField(Categorys, verbose_name='分類') # 文章和分類是多對多的關係
    tags = models.ManyToManyField(Tags,verbose_name='標籤')  # 標籤和分類也是多對多的關係
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='創建時間')
    update_time = models.DateTimeField(auto_now=True, verbose_name='最後修改時間')
    abstract = models.TextField(max_length=256, blank=True, verbose_name='摘要')
    body = models.TextField(verbose_name='正文')
    img = models.ImageField(upload_to='images', blank=True, null=True, verbose_name='博客插圖')

    class Meta:
        verbose_name = '博客文章'
        verbose_name_plural = '博客文章'
        ordering = ['-created_time']

1 模型內部類Meta

class Meta用來使用類提供的模型元數據。例如排序選項ordering、數據庫表名db_table、單數和複數名稱verbose_name和 verbose_name_plural(verbose這兩個元數據基本所有Django項目都這樣固定寫)。
在class Article中我們使用的元數據ordering =[’-created_time’],表明了將來取出文章列表時候,是以創建時間降序排列的。如果去掉‘-’則升序排列

2 一對多,多對多

作者和文章的關係是一對多的關係,Django中使用ForeignKey來關聯。

from django.contrib.auth.models import User
auth = models.ForeignKey(User, verbose_name='作者') 

這裏使用了Django自帶的User類,之後在寫博客登錄註冊認證時候會詳細介紹。

文章和標籤以及分類是多對多的關係,Django中使用ManyToManyField。
(img的工作原理是存儲圖片的相對路徑——第一個參數,與settings中靜態文件目錄路徑搭配做到加載圖片的效果,下一節模板渲染會用到js,css等靜態文件,一起講下怎麼使用。)

3 blank 以及 null

在img中,可以看到有blank 和 null參數,這兩個參數的區別在於null爲數據庫範圍的,而blank是表單驗證時候的。例如如果一個字段的 blank=True ,Django 在進行表單數據驗證時,會允許該字段是空值。如果字段的 blank=False ,該字段就是必填的。
這裏blank=True,null=True則對應表示,在寫博客文章時候可以選擇不上傳博客插圖,且在不上傳博客插圖時候,數據庫img字段的值爲null。如果null設置爲False,則不上傳博客插圖時候,數據庫img字段的值會爲’’ 空字符串。

4. 生成遷移文件

模型設計好以後,就要和數據庫對接生成相應的數據存儲。第一次運行時候執行以下命令先生成遷移文件:
python manage.py makemigrations
在這裏插入圖片描述
可以看到在migrations文件目錄下生成了一個0001_initial.py的遷移文件,可以自行打開看一下。(每當你修改數據模型以後都要重新生成一次遷移文件)
在這裏插入圖片描述
然後根據遷移文件,執行以下命令,生成我們的數據庫表:
python manage.py migrate
在這裏插入圖片描述

二、創建超級用戶

想要使用admin管理博客內容,需要進行admin的數據模型註冊,然後創建超級用戶

1. 模型註冊。

from django.contrib import admin
from blog.models import Categorys,Tags,Article


class ArticleAdmin(admin.ModelAdmin):
    list_display = ['title','auth','created_time','update_time','abstract']


admin.site.register(Categorys)
admin.site.register(Tags)
admin.site.register(Article,ArticleAdmin)

這裏list_display 中的字符名一定要要模型中的數據變量名相同。
具體幹嘛用的其實就是admin管理頁面要展示的內容。
除了list_display還有,list_filter詳情使用和效果如下
http://www.pianshen.com/article/384761692/

2 創建超級用戶

python manage.py createsuperuser
在這裏插入圖片描述

3. 登錄管理頁面

註冊模型和超級用戶創建完畢以後,可以啓動項目查看admin界面:
http://192.168.1.113:8888/admin (這邊是你設置的web入口)
如果你直接沒有配置IP端口啓動了項目,則admin界面就是默認的
127.0.0.1:8000/admin

python manage.py runserver

在這裏插入圖片描述
在這裏插入圖片描述
現在就可以用admin管理界面爲你的博客添加文章,添加分類和標籤了。添加以後可以去django項目的sqlite查詢表是否有對應的數據。

三、配置使用mysql

以上都是使用的django自帶的sqlite3,實際生產中我們一般都使用mysql,MongoDB,Oracle等。我們以mysql爲例。

1. 使用mysql的準備配置

首先在mysql中創建項目需要的mysql數據庫
在這裏插入圖片描述
接着在website/website/settings.py 中將默認的數據庫配置成mysql;

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'website',  # 你的數據庫名稱
        'HOST': '127.0.0.1',  # 數據庫主機
        'PORT': 3306, 
        'USER': 'root', 
        'PASSWORD': 'ljp310851649.', 
    }
}

配置完以後爲了讓django能夠使用mysql需要pip安裝pymysql包,
在這裏插入圖片描述
同時在settings中加入以下代碼:

import pymysql
pymysql.install_as_MySQLdb()

2. 重新執行遷移文件

因爲數據模型沒有發生變化,只是數據庫發生了改變,所以重新執行一次遷移操作就可以了:

python manage.py migrate

在這裏插入圖片描述
再次創建超級用戶,登錄admin管理頁面新增你的相關數據,然後查看mysql看是否添加成功。

python manage.py createsuperuser

在這裏插入圖片描述

總結:
這節主要講了在項目環境搭建好以後,進行模型設計,數據庫配置以及admin的應用註冊和後臺頁面管理等,下一節開始講一下用戶展示的頁面,主要包括以下內容吧:

  1. 靜態文件的使用
  2. 模板繼承
  3. 博客分頁

git:
website-day02
https://github.com/syjzlee/Django-website-days

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章