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