添加一條urls.py配置:css
urlpatterns = [ ..... re_path('^$', views.index), # 訪問http://127.0.0.1:8000 能夠直接訪問首頁 ]
<head> <!-- 引入 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="/static/blog/bootstrap-3.3.7/css/bootstrap.css"> <!-- jQuery (Bootstrap 的全部 JavaScript 插件都依賴 jQuery,因此必須放在前邊) --> <script src="/static/js/jquery-3.3.1.js"></script> <!-- 引入 Bootstrap 核心 JavaScript 文件 --> <script src="/static/blog/bootstrap-3.3.7/js/bootstrap.js"></script> <!--依賴jquery--> </head>
拷貝這些代碼到index頁面的body標籤內。html
因爲咱們的頁面導航欄用不上,刪除模板中的form標籤和<li class="dropdown">標籤的內容。python
添加導航欄欄目,編寫模板語句,斷定登陸和未登陸兩種狀態下導航欄右側顯示:jquery
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li class="active"><a href="#">園子 <span class="sr-only">(current)</span></a></li> <li><a href="#">新聞</a></li> <li><a href="#">博問</a></li> <li><a href="#">閃存</a></li> <li><a href="#">小組</a></li> <li><a href="#">收藏</a></li> <li><a href="#">招聘</a></li> <li><a href="#">班級</a></li> <li><a href="#">找找看</a></li> </ul> <ul class="nav navbar-nav navbar-right"> {% if request.user.is_authenticated %} {# 已經登陸 #} <li><a href="#">{{ request.user.username }}</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="#">修改密碼</a></li> <li><a href="#">修改頭像</a></li> <li><a href="/logout/">註銷</a></li> <li role="separator" class="divider"></li> <li><a href="#">Separated link</a></li> </ul> </li> {% else %} {# 還未登陸 #} <li><a href="/login/">登陸</a></li> <li><a href="/register/">註冊</a></li> {% endif %} </ul> </div><!-- /.navbar-collapse --> </div>
未登陸狀況下顯示以下:數據庫
點擊登陸跳轉到登陸頁面登陸,輸入yuan/yuan1234和驗證碼後,登陸成功,跳轉回index首頁:django
首先在路由中添加logout路徑:bootstrap
path('logout/', views.logout),
其次在視圖中編寫logout視圖函數:瀏覽器
from django.contrib import auth # 引入用戶認證組件auth模塊 def logout(request): auth.logout(request) # 等同於執行request.session.flush() return redirect("/login/")
在首頁點擊註銷操做,頁面返回到登陸頁面,手動訪問博客首頁,導航欄右側顯示登陸/註冊按鈕。bash
首先在用戶名前添加span標籤,並添加bootstrap樣式session
<ul class="nav navbar-nav navbar-right"> {% if request.user.is_authenticated %} {# 已經登陸 #} <li><a href="#"><span id="user_icon" class="glyphicon glyphicon-user"></span>{{ request.user.username }}</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="#">修改密碼</a></li> <li><a href="#">修改頭像</a></li> <li><a href="/logout/">註銷</a></li> <li role="separator" class="divider"></li> <li><a href="#">Separated link</a></li> </ul> </li> {% else %} {# 還未登陸 #} <li><a href="/login/">登陸</a></li> <li><a href="/register/">註冊</a></li> {% endif %} </ul>
注意bootstrap的Glyphicons 字體圖標使用:
調整小人圖標樣式:
<style> #user_icon { font-size: 18px; /*調整大小*/ margin-right: 10px; /*調整距離*/ vertical-align: -3px; /*調整高度*/ } </style>
顯示效果如圖所示:
利用bootstrap提供的柵格系統,將頁面按3-6-3的比例劃分:
<div class="container-fluid"> <div class="row"> <div class="col-md-3">111</div> <div class="col-md-6">222</div> <div class="col-md-3">333</div> </div> </div>
左右兩個部分先不作,暫時使用bootstap的面板進行填充:
<div class="panel panel-warning"> <div class="panel-heading">Panel heading without title</div> <div class="panel-body"> Panel content </div> </div>
顯示效果以下所示:
admin是Django內部的一個組件:後臺數據管理組件(WEB頁面)。admin並非項目必需的。
(venv) MacBook-Pro:cnblog hqs$ python3 manage.py createsuperuser Username: alex Email address: Password: Password (again): Superuser created successfully.
建立好新的超級用戶的帳號密碼:alex/alex1234,訪問admin頁面:
登陸成功後顯示以下:
在cnblog/blog/admin.py裏引入models,並以以下方式註冊表:
from django.contrib import admin # Register your models here. from blog import models admin.site.register(models.UserInfo) # 用戶信息表 admin.site.register(models.Blog) admin.site.register(models.Category) admin.site.register(models.Tag) admin.site.register(models.Article) # 文章表 admin.site.register(models.ArticleUpDown) # 文章點贊表 admin.site.register(models.Article2Tag) admin.site.register(models.Comment) # 評論表
註冊完成後,頁面以下所示:
建立好的博客對象以下所示:
以下所示將alex綁定曹劉社區,yuan綁定yuan我的博客。
填寫並保存文章,發現admin強行限制Category(分類)必須得加。
添加category對象:
文章添加成功:
views.py:
from blog import models def index(request): # 拿到當前全部的文章 article_list = models.Article.objects.all() return render(request, "index.html", {"article_list": article_list})
index.html:
<!--文章列表部分--> <div class="col-md-6"> <div class="article_list"> {% for article in article_list %} <div class="article-item"> <h5><a href="">{{ article.title }}</a></h5> <div class="article-desc"> <span class="media-left"> {# 用戶頭像 #} <a href=""><img width="56" height="56" src="media/{{ article.user.avatar }}" alt=""></a> </span> <span class="media-right"> {# 文章摘要 #} {{ article.desc }} </span> </div> </div> <hr> {% endfor %} </div> </div>
注意:
(1)瀏覽器訪問頭像路徑必定要在前面拼接media別名
<div class="article-desc"> <span> <a href=""><img width="56" height="56" src="media/{{ article.user.avatar }}" alt=""></a> </span> </div>
(2)獲取文章摘要信息
<span class="media-right"> {# 文章摘要 #} {{ article.desc }} </span>
(3)利用bootstrap提供的media-left和media-right調整文章樣式,添加<hr>標籤分隔文章塊。
顯示效果以下:
index.html:
<!--文章下方詳細信息--> <div class="small pub_info"> {# 做者 #} <span><a href="">{{ article.user.username }}</a></span> {# 文章發佈時間 #} <span>發佈於 {{ article.create_time|date:"Y-m-d H:i" }}</span> {# 評論數 #} <span class="glyphicon glyphicon-comment"></span> 評論({{ article.comment_count }}) {# 點贊數 #} <span class="glyphicon glyphicon-thumbs-up"></span> 點贊({{ article.up_count }}) </div>
(1)日期顯示須要修改時區,修改settings.py中的TIME_ZONE字段
# TIME_ZONE = 'UTC' TIME_ZONE = "Asia/Shanghai"
(2)引入bootstrap的Glyphicons字體圖標顯示評論圖標和點贊圖片
{# 評論數 #} <span class="glyphicon glyphicon-comment">評論({{ article.comment_count }})</span> {# 點贊數 #} <span class="glyphicon glyphicon-thumbs-up">點贊({{ article.up_count }})</span>
(3)在這裏發現模型中Article類的評論、點贊計數字典沒有添加,系統報錯
comment_count = models.IntegerField(default=0) up_count = models.IntegerField(default=0) down_count = models.IntegerField(default=0)
添加上述代碼後,再次執行數據庫遷移命令:
$ python3 manage.py makemigrations $ python3 manage.py migrate
(4)樣式調整,給這個詳情信息區域添加class="small",讓字體變小外,經過CSS調整圖標樣式
<style> #user_icon { font-size: 18px; /*調整大小*/ margin-right: 10px; /*調整距離*/ vertical-align: -3px; /*調整高度*/ } .pub_info { margin-top: 10px; } .pub_info .glyphicon-comment { vertical-align: -1px; } </style>