對(duì) Django 的評(píng)價(jià):借用李清照的《鷓鴣天 桂花》來表達(dá),
暗淡輕黃體性柔。情疏跡遠(yuǎn)只香留。何須淺碧深紅色,自是花中第一流。
梅定妒,菊應(yīng)羞。畫闌開處冠中秋。騷人可煞無情思,何事當(dāng)年不見收。
Django makes it easier to build better Web apps more quickly and with less code.
默認(rèn)已經(jīng)創(chuàng)建好的 django 的項(xiàng)目和應(yīng)用,并將應(yīng)用注冊到項(xiàng)目中
設(shè)計(jì)數(shù)據(jù)庫和表結(jié)構(gòu)是做網(wǎng)站的基礎(chǔ)。
在 ./blog/model.py 中編寫如下類
from django.db import models from django.contrib.auth.models import User # Create your models here. from django.utils import timezone class BlogArticles(models.Model): title = models.CharField(max_length=300) author = models.ForeignKey(User, related_name='blog_posts', null=True, on_delete=models.SET_NULL) body = models.TextField() publish = models.DateTimeField(default=timezone.now) class Meta: ordering = ('-publish', ) def __str__(self): return self.title
創(chuàng)建model 參考參數(shù):
一、字段 1、models.AutoField 自增列= int(11) 如果沒有的話,默認(rèn)會(huì)生成一個(gè)名稱為 id 的列,如果要顯示的自定義一個(gè)自增列,必須將 給列設(shè)置為主鍵 primary_key=True。 2、models.CharField 字符串字段 必須 max_length 參數(shù) 3、models.BooleanField 布爾類型=tinyint(1) 不能為空,Blank=True 4、models.ComaSeparatedIntegerField 用逗號(hào)分割的數(shù)字=varchar 繼承CharField,所以必須 max_lenght 參數(shù) 5、models.DateField 日期類型 date 對(duì)于參數(shù),auto_now =True則每次更新都會(huì)更新這個(gè)時(shí)間;auto_now_add 則只是第一次創(chuàng)建添加,之后的更新不再改變。 6、models.DateTimeField 日期類型 datetime 同DateField的參數(shù) 7、models.Decimal 十進(jìn)制小數(shù)類型= decimal 必須指定整數(shù)位max_digits和小數(shù)位decimal_places 8、models.EmailField 字符串類型(正則表達(dá)式郵箱)=varchar 對(duì)字符串進(jìn)行正則表達(dá)式 9、models.FloatField 浮點(diǎn)類型= double 10、models.IntegerField 整形 11、models.BigIntegerField 長整形 integer_field_ranges ={ 'SmallIntegerField':(-32768,32767), 'IntegerField':(-2147483648,2147483647), 'BigIntegerField':(-9223372036854775808,9223372036854775807), 'PositiveSmallIntegerField':(0,32767), 'PositiveIntegerField':(0,2147483647), } 12、models.IPAddressField 字符串類型(ip4正則表達(dá)式) 13、models.GenericIPAddressField 字符串類型(ip4和ip6是可選的) 參數(shù)protocol可以是:both、ipv4、ipv6 驗(yàn)證時(shí),會(huì)根據(jù)設(shè)置報(bào)錯(cuò) 14、models.NullBooleanField 允許為空的布爾類型 15、models.PositiveIntegerFiel 正Integer 16、models.PositiveSmallIntegerField 正smallInteger 17、models.SlugField 減號(hào)、下劃線、字母、數(shù)字 18、models.SmallIntegerField 數(shù)字 數(shù)據(jù)庫中的字段有:tinyint、smallint、int、bigint 19、models.TextField 字符串=longtext 20、models.TimeField 時(shí)間 HH:MM[:ss[.uuuuuu]] 21、models.URLField 字符串,地址正則表達(dá)式 22、models.BinaryField 二進(jìn)制 23、models.ImageField圖片 24、models.FilePathField文件 二、字段參數(shù) 1、null=True 數(shù)據(jù)庫中字段是否可以為空 2、blank=True django的 Admin 中添加數(shù)據(jù)時(shí)是否可允許空值 3、primary_key = False 主鍵,對(duì)AutoField設(shè)置主鍵后,就會(huì)代替原來的自增 id 列 4、auto_now 和 auto_now_add auto_now 自動(dòng)創(chuàng)建---無論添加或修改,都是當(dāng)前操作的時(shí)間 auto_now_add 自動(dòng)創(chuàng)建---永遠(yuǎn)是創(chuàng)建時(shí)的時(shí)間 5、choices GENDER_CHOICE = ( (u'M', u'Male'), (u'F', u'Female'), ) gender = models.CharField(max_length=2,choices = GENDER_CHOICE) 6、max_length 7、default 默認(rèn)值 8、verbose_name Admin中字段的顯示名稱 9、name|db_column 數(shù)據(jù)庫中的字段名稱 10、unique=True 不允許重復(fù) 11、db_index = True 數(shù)據(jù)庫索引 12、editable=True 在Admin里是否可編輯 13、error_messages=None 錯(cuò)誤提示 14、auto_created=False 自動(dòng)創(chuàng)建 15、help_text 在Admin中提示幫助信息 16、validators=[] 17、upload-to
# 命令行執(zhí)行 # 創(chuàng)建數(shù)據(jù)庫表遷移文件 python manage.py makemigrations # 查看遷移文件 python manage.py sqlmigrate blog 0001
然后會(huì)發(fā)現(xiàn)在migrations文件夾下生成了以0001開頭的py文件,在命令行會(huì)輸出我們的建表語句(sql)
# 生成數(shù)據(jù)表 python manage.py migrate
可以在 navicate 中連接 db.sqlite 進(jìn)行數(shù)據(jù)的查看。
python manage.py createsuperuser
跟著步驟就可以了,創(chuàng)建超級(jí)管理員的賬號(hào)和密碼。一定牢記嗷~
啟動(dòng)項(xiàng)目后訪問 http://127.0.0.1:8000/admin/
然后就可以進(jìn)入頁面啦
頁面中的 Groups 和 Users 是 Django 在用戶管理應(yīng)用中默認(rèn)的。
我們登陸進(jìn)來之后沒有找到發(fā)布文章的地方,為什么呢?
接下來就需要我們對(duì) ./blog/admin.py 文件做修改了。
from django.contrib import admin from .models import BlogArticles # 將該類BlogArticles注冊到admin中 admin.site.register(BlogArticles)
再次返回我們的 http://127.0.0.1:8000/admin/ 就可以進(jìn)行文章的添加了。
我們寫好的文章如果想讓別人看到,如何做呢?
在templates目錄下創(chuàng)建一個(gè)文件base.html 和一個(gè)blog文件夾,里面有 title.html , content.html 文件
文件內(nèi)容如下:
# base.html !DOCTYPE html> html lang="zh-cn"> head> meta http-equiv="X-UA-Compatible" content="IE=Edge"> meta charset="utf-8"> meta name="viewport" content="width=device-width, initial-scale=l"> title>{% block title %}{% endblock %}/title> link rel="stylesheet" rel="external nofollow" > link rel="stylesheet" rel="external nofollow" > /head> body> div class="container"> {% block content %} {% endblock %} /div> /body> script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js">/script> /html> # title.html {% extends "base.html" %} {% block title %} 博客標(biāo)題 {% endblock %} {% block content %} div class="row text-center vertical-middle-sm"> h1>小北的博客/h1> /div> div class="row"> div class="col-xs-12 col-mo-8"> ul> {% for blog in blogs %} li> a href="{{ blog.id }}" rel="external nofollow" >{{ blog.title }}/a> /li> {% endfor %} /ul> /div> div class="col-xs-6 col-mo-4"> h2>廣告/h2> p>和我一起學(xué)python/p> /div> /div> {% endblock %} # content.html {% extends "base.html" %} {% block title %} 博客內(nèi)容 {% endblock %} {% block content %} div class="row text-center vertical-middle-sm"> h1>{{ article.title }}/h1> /div> div class="row"> div class="col-xs-12 col-mo-8"> div> p>{{ article.author.username }}/p> p>{{ publish }}/p> p>{{ article.body }}/p> /div> /div> div class="col-xs-6 col-mo-4"> h2>廣告/h2> p>和我一起學(xué)python/p> /div> /div> {% endblock %}
一定要在 templates 下創(chuàng)建,這是Django 默認(rèn)的存放本應(yīng)用所需模版的目錄
圖為示例結(jié)構(gòu)
在./blog/views.py 中編寫視圖函數(shù)
from django.shortcuts import render from .models import BlogArticles # Create your views here. def blog_title(request): blogs = BlogArticles.objects.all() return render(request, "blog/title.html", {"blogs": blogs}) def blog_aritcle(request, article_id): article = BlogArticles.objects.get(id=article_id) pub = article.publish return render(request, "blog/content.html", {"article": article, "publish": pub})
在url中注冊路由地址
在 blog/urls.py 中
from django.conf.urls import url from . import views from django.urls import path from blog.views import * urlpatterns = [ path('title', blog_title, name='blog_title'), path('int:article_id>', blog_aritcle, name='blog_aritcle'), ]
在當(dāng)前項(xiàng)目下的urls.py 中
from django.contrib import admin from django.urls import path from django.conf.urls import url, include urlpatterns = [ path('admin/', admin.site.urls, name='admin'), path('blog/', include('blog.urls')), ]
然后頁面就可以訪問了,可以查看文章列表頁和詳情頁。
到此這篇關(guān)于利用Python Django實(shí)現(xiàn)簡單博客系統(tǒng)的文章就介紹到這了,更多相關(guān)Django實(shí)現(xiàn)博客系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:常德 黑龍江 鷹潭 益陽 上海 惠州 黔西 四川
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《利用Python Django實(shí)現(xiàn)簡單博客系統(tǒng)》,本文關(guān)鍵詞 利用,Python,Django,實(shí)現(xiàn),簡單,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。