摘要:如果是多對多的關(guān)系,可在任意一端寫。構(gòu)造路由構(gòu)建路由和視圖函數(shù),并告訴主路由函數(shù)如何查找前端顯示創(chuàng)建靜態(tài)模板目錄,修改模板文件,文件的配置。
如何使用Django框架編寫自己的blog系統(tǒng) 創(chuàng)建項(xiàng)目
step_1
首先創(chuàng)建一個(gè)新項(xiàng)目FirstBlog(以下簡稱FB),實(shí)現(xiàn)基礎(chǔ)功能,如創(chuàng)建數(shù)據(jù)庫,創(chuàng)建超級用戶,可以實(shí)現(xiàn)后臺管理員登陸 過程可參考[鏈接描述][1]注冊應(yīng)用
step_2
在FB中注冊應(yīng)用blog,編寫數(shù)據(jù)庫文件blog/models.py,告訴主程序FirstBlog/settings.py你注冊了應(yīng)用,并修改數(shù)據(jù)庫 后臺運(yùn)行前,需要在blog/admin.py中注冊站點(diǎn) 博客屬性:id,博客標(biāo)題,博客作者,博客摘要,博客正文,博客創(chuàng)建時(shí)間,博客所屬專欄(類別),博客標(biāo)簽,閱讀數(shù) 標(biāo)簽屬性:id,標(biāo)簽名稱 專欄(類別)屬性:id,專欄名稱 博客和專欄: 多對一 博客和標(biāo)簽: 多對多
與flask的數(shù)據(jù)庫表結(jié)構(gòu)不同,django框架里,數(shù)據(jù)庫表之間的關(guān)聯(lián)只需要在對應(yīng)關(guān)系里多的一側(cè)寫外鍵ForeignKey,不需要在另一個(gè)表寫反向引用。如果是多對多的關(guān)系,可在任意一端寫ManyToManyField。
# blog/models.py from django.contrib.auth.models import User from django.db import models # Create your models here. # 博客屬性:id,博客標(biāo)題,博客作者,博客摘要,博客正文,博客創(chuàng)建時(shí)間,博客所屬專欄(類別),博客標(biāo)簽,閱讀數(shù),評論數(shù) # 標(biāo)簽屬性:id,標(biāo)簽名稱 # 專欄(類別)屬性:id,專欄名稱 # 博客和專欄: 多對一 # 博客和標(biāo)簽: 多對多 class Category(models.Model): name = models.CharField(max_length=64, verbose_name="專欄名稱") class Meta: verbose_name = "專欄" verbose_name_plural = "專欄" def __str__(self): return "%s" %(self.name) class Tag(models.Model): name = models.CharField(max_length=64, verbose_name="標(biāo)簽名稱") class Meta: verbose_name = "標(biāo)簽" verbose_name_plural = "標(biāo)簽" def __str__(self): return "%s" %(self.name) class Post(models.Model): title = models.CharField(max_length=100, unique=True, verbose_name="標(biāo)題") create_time = models.DateTimeField(verbose_name="創(chuàng)建時(shí)間") summary = models.CharField(max_length=255, verbose_name="摘要") body = models.TextField(verbose_name="正文") # 作者可以從管理員數(shù)據(jù)庫表User中查找 author = models.ForeignKey(User, verbose_name="作者") category = models.ForeignKey(Category, verbose_name="專欄") tags = models.ManyToManyField(Tag, verbose_name="標(biāo)簽") views = models.IntegerField(default=0,verbose_name="閱讀數(shù)") class Meta: verbose_name = "博客" verbose_name_plural = "博客" def __str__(self): return "%s" %(self.title)創(chuàng)建數(shù)據(jù)
step_3
后臺創(chuàng)建多個(gè)標(biāo)簽、欄目,多篇博客,確保前端顯示是有數(shù)據(jù)的。構(gòu)造路由
step_4
構(gòu)建路由和視圖函數(shù),并告訴主路由函數(shù)FirstBlog/settings.py如何查找前端顯示
step_5
創(chuàng)建靜態(tài)模板目錄static/,修改模板文件,settings.py文件的static配置。如果沒有修改settings.py文件,可在模板文件加上{% load static%}。并修改樣式(css...)的位置 根據(jù)使用的網(wǎng)頁模板,顯示自己的頁面
顯示結(jié)果:
from django.urls import reverse #返回正確而完整的路由
為了在html文件內(nèi),繼續(xù)閱讀可以直接跳轉(zhuǎn){{ post.get_url }} 注意在重寫視圖函數(shù)名稱時(shí),需要申明命名空間
修改blog/models.py的Post表,添加屬性get_url()
#blog/models.py def get_url(self): return reverse("blog:detail",kwargs={"id":self.pk})
#blog/urls.py from django.conf.urls import url from django.contrib import admin from blog import views app_name = "blog" urlpatterns = [ url(r"^$",views.index ,name="index"), url(r"book/(?Pd+)/$",views.detail,name="detail" ), ]
闊以看見html文件的‘繼續(xù)閱讀’會自動(dòng)鏈接到博客詳情頁
{#templates/blog/index.html 部分代碼#}正文顯示使用markdown語法
現(xiàn)在的博客都是使用mrkdown語法來顯示的,并且配備高亮顯示
需要下載安裝模塊Markdown,pygments 在視圖函數(shù)里將博客正文轉(zhuǎn)成html時(shí),加上高亮的ectensions 修改base.html,添加對應(yīng)高亮的css樣式
#blog/views.py文件 post.body = markdown( post.body, extensions=["markdown.extensions.extra", "markdown.extensions.codehilite", "markdown.extensions.toc", ], output_format="html" )
{#templates/blog/detail.html 部分代碼#}{{ post.body | safe}}
{#templates/base.html 部分代碼#} {# 代碼高亮顯示的樣式#}增加閱讀量
修改數(shù)據(jù)庫表結(jié)構(gòu),添加增加閱讀量的方法
#blog/models.py # 增加閱讀量 def add_views(self): self.views +=1 self.save(update_fields=["views"]) #只重新保存更新字段views
修改視圖函數(shù),當(dāng)你訪問某一篇博客時(shí),閱讀量加1
post = Post.objects.get(id=id) post.add_views()
闊以從圖上看出,閱讀量的增加
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45002.html
摘要:采用快速掌握核心知識解決實(shí)際問題中補(bǔ)充的方式。讓每一行代碼都能給自己帶來價(jià)值,才是每個(gè)碼農(nóng)應(yīng)該有的思維,而不是成為一個(gè)職業(yè)碼農(nóng)。不過做個(gè)人博客有一個(gè)重要的價(jià)值便是在你做成之后可以部署上線讓它成為自己在互聯(lián)網(wǎng)的基地。 勤學(xué)似春起之苗,不見其增,而日有所長 如果你一直想學(xué)python,但是不知道從何入手,那么就不要猶豫了。這篇文章就是我的python新實(shí)戰(zhàn)計(jì)劃可能適合你。 學(xué)習(xí) Pytho...
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
閱讀 3023·2021-11-23 09:51
閱讀 2855·2021-11-11 16:55
閱讀 2973·2021-10-14 09:43
閱讀 1427·2021-09-23 11:22
閱讀 1072·2019-08-30 11:04
閱讀 1722·2019-08-29 11:10
閱讀 994·2019-08-27 10:56
閱讀 3152·2019-08-26 12:01