成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python實(shí)戰(zhàn)----博客系統(tǒng)

Richard_Gao / 2768人閱讀

摘要:如果是多對多的關(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é)果:

如何快速準(zhǔn)確跳轉(zhuǎn)頁面
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

相關(guān)文章

  • 讓敲過的每行代碼產(chǎn)生價(jià)值

    摘要:采用快速掌握核心知識解決實(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...

    OnlyMyRailgun 評論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<