django專案開發實戰——部落格
p個大s:
這裡用的是python3.7和Django2.0.假設全都安裝成功= =
然後這個是我做個人網站的一個過程=。=
然後這個也不能算是個教程吧=。=
然後這只是粗糙的記錄=。=
最後,防脫髮用霸王=3=
生成一個完整的django專案
建立Django專案
django-admin.py startproject MySite
此時,你會看到這樣的資料夾:
執行一下你的專案,看看有沒有成功:
./manage.py runserver
終端會顯示這些:
有紅字也不要擔心,因為還沒有設定呢!
接下來去http://127.0.0.1:8000/
看一看:
成功了!
ps:如果想要外部機器(同一網路)訪問本機的Django服務的話,要寫成./manage.py runserver 0.0.0.0:9999
,並將setting.py
中的ALLOWED_HOSTS
改為ALLOWED_HOSTS = ['*', ]
,一定要加逗號!改一些配置
ps:這裡的順序可能不對。= =更改
/MySite/MySite/settings.py
中的內容
Django預設的DATABASES
是sqlite
,是這樣的:
這裡我是用的是MySQL
資料庫,因此,我要改成這樣:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'MySite', 'USER': 'xxx', 'PASSWORD': 'xxxxx', 'HOST': '127.0.0.1', 'PORT': '3306' } }
這裡一定要確保資料庫已經存在了。在這之前,需要建立資料庫,像這樣滴:
create database MySite CHARACTER SET utf8 COLLATE utf8_general_ci;
還要更改時區和語言
向
/MySite/MySite/__init__.py
中新增內容import pymysql pymysql.install_as_MySQLdb()
資料庫遷移
首先,執行./manage.py makemigrations
然後,執行
./manage.py migrate
這樣就成功啦~
建立超級使用者
建立超級使用者是用來登陸到admin後臺管理中的
執行./manage.py createsuperuser
然後按照提示填寫就好啦~
ps:一定要先進行資料庫遷移,再建立使用者。否則,會出現進入admin看看
在瀏覽器中輸入http://127.0.0.1:8000/admin
,會出現登入頁面,此時會發現全都變成中文了,說明之前的設定生效了。
接下來,就可以用剛剛建立的使用者登陸了,檢視後臺資料了!
專案正式開始
建立app
執行./manage.py startapp Post
,檢視專案結構,如下:
完成上步操作後,需要在
/MySite/MySite/settings.py
中將app新增進去:
接下來,需要在app資料夾下新增urls.py
,用於路由對映:
在urls.py
中這樣寫:app_name = 'Post' # 這裡是為了url反向解析用 urlpatterns = [ # 這裡放對映的view ]
同時,在
/MySite/MySite/urls.py
中需要新增對Post.urls
的對映:from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path(r'', include('Post.urls')), ]
建立模型
在app下的models.py
建立自己的模型就可以啦~from django.db import models class Category(models.Model): """分類""" name = models.CharField(max_length=100) class Tag(models.Model): """標籤""" name = models.CharField(max_length=100) class Post(models.Model): """文章""" title = models.CharField(max_length=100) body = models.TextField() created_time = models.DateTimeField() modified_time = models.DateTimeField() excerpt = models.CharField(max_length=200, blank=True) # 文章摘要,可為空 category = models.ForeignKey(Category, on_delete=True) # ForeignKey表示1對多(多個post對應1個category) tags = models.ManyToManyField(Tag, blank=True) views = models.PositiveIntegerField(default=0) # 閱讀量
然後一定不要忘記再進行資料庫遷移啊!!
前端模版
這裡的前端模板使用的是模板之家的
連結��:http://www.cssmoban.com/tags.asp?n=html5首先建立templates目錄,結構如下:
此時,需要在setting.py
中新增關於模板的配置:
接下來是static目錄,結構如下:
顯而易見,這裡放的是一些css、js檔案等index檢視
首先,在Post/views.py
中實現index
方法:def index(request): """ 主頁 :param request: :return: """ return render(request=request, template_name='Post/index.html')
request
為請求物件;
template_name
為渲染的前端頁面的路徑字串(相對templates目錄)然後,在
Post/urls.py
中進行路由對映:urlpatterns = [ url(r'^$', views.index, name="index"), ]
注意:如果你主頁的url是空,正則必須寫成^$
最後,一定要要修改靜態頁面中引用的路徑。
對於Django來說,可以使用static
標籤。
在頁面開頭引入{% load static %}
,這個對應的配置資訊是
並將頁面中的路徑改為
ps:對於css或者js中的引用也不要忘了改!執行一下。
搞定!向前端渲染及分頁
首先,更改index()
from django.shortcuts import render from django.core.paginator import Paginator from .models import Post def index(request): """ 主頁 :param request: :return: """ post = Post.objects.all() limit = 3 paginator = Paginator(post, limit) page = request.GET.get('page', 1) result = paginator.page(page) context = { "post_list": result, "page": page } return render(request=request, template_name='Post/index.html', context=context)
然後修改
index.html
執行看一下
搞定!更改index.html中的所有跳轉連結
在這裡,我用的是url的反向解析。這樣可以減輕後期維護成本。因此,就需要在urls.py中新增如下資訊:
在html中修改成如下:
部落格文章頁面
別忘了改跳轉連結!!!!
文章詳情頁和主頁大體結構是相似的,因此,這裡使用了模版繼承。
在基類模版裡,使用這個,將子類模版需要填充的位置佔位
然後在子類别範本中,使用相同的標籤將填充的內容進行包裹
最後,不要忘了在子類别範本中再寫上{% extends 'Post/base.html' %}
和{% load static %}
在
Post/urls.py
中新增詳情頁的url:url(r'^detail/post-(?P<pk>\d+)$', views.detail, name="detail"),
並新增detail檢視
def detail(request, pk): """ :param request: :param pk: 接收到的文章的主鍵id :return: """ return render(request, template_name='Post/blog.html', )
執行看一下吧!
搞定!
繼續在檢視中新增內容,將假資料改為真實的文章資料
對於多對多的關係來說,可以寫成這樣:
看一看效果吧!
**接下來就是讓我可以上傳markdown格式的文字了!
這個暫時先不解決了= =,小本本記下來**新增分類欄
這裡使用自定義模版標籤!
首先,在app資料夾下,建立templatetags
資料夾,然後建立一個py檔案,裡面定義模版標籤,目錄是這樣滴:
然後定義一個分類目錄的標籤:
from django import template from ..models import Category register = template.Library() @register.simple_tag def get_categories(): """ 分類目錄標籤 :return: """ return Category.objects.all()
在前端引用自定義標籤時,一定要開頭載入自定義的模版標籤所在的py檔案,
{% load simple_tags %}
,然後再使用:{% get_categories as category_list %} {% for category in category_list %} <li><a href="#">{{ category.name }}</a></li> {% endfor %}
看一下效果吧!
搞定!評論功能
評論功能新建一個app./manage.py startapp comment
不要忘了把它註冊到django中
建立模型:
from django.db import models class Comment(models.Model): name = models.CharField(max_length=20) email = models.EmailField(max_length=50) website = models.URLField(blank=True) text = models.TextField() created_time = models.DateTimeField(auto_now_add=True) post = models.ForeignKey('Post.Post', on_delete=True) # 一篇文章有多個評論
不要忘了註冊到admin中啊!
admin.site.register(Comment)
最重要的一步。資料庫遷移啊!!!
這裡要實現的是點選submit按鈕,會提交評論
在comment/views.py
中新增檢視:from django.shortcuts import render, redirect from .models import Comment from Post.models import Post from django.urls import reverse def submit_comment(request, pk): """ 處理提交的評論 :param request: :return: """ post = request.POST comment = Comment() comment.name = post.get("name") comment.email = post.get('email') comment.website = post.get('website') comment.text = post.get('message') comment.post = Post.objects.get(id=pk) comment.save() return redirect(reverse('Post:detail', kwargs={"pk": pk}))
更改前端頁面中的評論部分:
在
comment/urls.py
中新增對映:
試一下吧!
搞定!後面再完善一下。搞成可以回覆的啵!小本本記下來~
最新評論
這個也寫成自定義標籤啵。@register.simple_tag def get_latest_comment(): """ 獲取最新評論 :return: """ comment_list = Comment.objects.all()[:5].only('post', 'text') # 只獲取特定欄位 return comment_list
看一下效果
搞定!閱讀量
在Post/models.py
中新增:
在
Post/views.py
中新增:
在前端頁面新增:
搞定!
好啦~到這裡部落格基本成型了。就是不好看= =。然後後面繼續完善。小本本記下來。
相關文章
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 部落格介面實戰篇(三)
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 部落格介面實戰篇(二)
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 部落格介面實戰篇(五)
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 部落格介面實戰篇(一)
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 部落格介面實戰篇(四)
- Django手擼一個部落格專案Django
- FastAPI專案實戰: 個人部落格專案的APIASTAPI
- Django 實戰練習-簡單部落格Django
- 分享一個我的 Django 部落格專案Django
- Python——個人部落格專案開發Python
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(八)Blazor
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(七)Blazor
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(三)Blazor
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(二)Blazor
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(九)Blazor
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(一)Blazor
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(五)Blazor
- 基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(四)Blazor
- 基於.NetCore開發部落格專案 StarBlog - (22) 開發部落格文章相關介面NetCore
- 基於.NetCore開發部落格專案 StarBlog - (6) 頁面開發之部落格文章列表NetCore
- 基於.NetCore開發部落格專案 StarBlog - (4) markdown部落格批量匯入NetCore
- 基於.NetCore開發部落格專案 StarBlog - (5) 開始搭建Web專案NetCoreWeb
- 部落格專案前臺實現
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 定時任務最佳實戰(二)
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 定時任務最佳實戰(三)
- 我將《L02 Laravel 教程 - Web 開發實戰進階》專案改成了部落格站LaravelWeb
- flask 專案開發實戰Flask
- 藉助雲開發搭建專屬技術部落格小程式丨實戰
- django 開發網站-建立 django 專案Django網站
- Vue部落格專案Vue
- 深入Django專案實戰與最佳實踐Django
- 基於.NetCore開發部落格專案 StarBlog - (21) 開始開發RESTFul介面NetCoreREST
- 基於.NetCore開發部落格專案 StarBlog - (30) 實現評論系統NetCore
- 基於.NetCore開發部落格專案 StarBlog - (11) 實現訪問統計NetCore
- tp5實戰開發仿黑糖部落格 免費開發教程
- 專案實戰介面開發SpringBootSpring Boot
- 基於.NetCore開發部落格專案 StarBlog - (1) 為什麼需要自己寫一個部落格?NetCore
- 基於.NetCore開發部落格專案 StarBlog - (3) 模型設計NetCore模型