Django練習項目之搭建博客


  背景:自從今年回家過年后,來到公司給我轉了試用,我的學習效率感覺不如從前,而且剛步入社會我總是想要怎么想明白想清楚一些事,這通常會花掉,消耗我大量的精力,因為我想把我的生活管理規划好了,而在it技術學習上就沒有了年前那股猛勁,從3月開始學習Django,到現在已經5個月了,期間有差不多1個月忙畢業論文,再加上回了趟家(打亂了學習節奏),Django的學習路程就顯的更加緩慢了,值得一提的事,我在Python學習上更深入了一層,之前學會的也就是Python基本語法,然后不斷的用if ,for ...寫了幾個腳本,而這次,我通過學習  廖雪峰 的Python 教程,對IO,進程線程,Json,正則,MD5,GUI,網絡編程,郵件收發,訪問數據庫,等都有了大致了解,學習的時候很是認真的,但是練習是很少很少的,沒有需求和好的想法,很難讓我着手去寫些什么..

  深入了解學習Python之后,首先發現了Python的強大,也知道了以后,未來,或者是不久將來馬上自己能用Python做些怎么樣的有趣的東西,甚至還能幫我賺點外快,然后我本着Linux愛好者的心,開始了對  Git  的學習,同樣也是看的 廖雪峰 的教程,Git的學習並不是很難,練習幾下也就會了,當然我說的是基本的版本控制,然后我馬上轉入了,我一直想進入的  Github  大門,我覺得作為一個程序開放者,尤其是學習了開源的,沒有自己的Github 都不算入門,Github的強大太多太多,這里就不一一說了,已經跑題了!!  學習完github給電腦配置好ssh,又回到了Django學習中,於是心血來潮,有了這篇我認為很重要的博客,作為這一大段時間學習成果的一個簡單記錄.

   Github官網https://github.com/  

   我的github https://github.com/fankcoder

   

 

對自己無語了,自己的吐槽技能真是+++

回來正題拉!!,正題是啥來着?!   Django練習項目之搭建博客

一,環境

  1.Python

  2.Django

 

二,安裝

  1.你的電腦沒有Python?  不用多說了坑人的Windows,送你友情連接 www.baidu.com

  2.Django安裝,推薦先裝個pip吧,easyinstall也可以,然后終端下輸入:

      pip install Django

   強烈推薦用新的Django版本!!1.8.1現在夠新么?找的教程都是1.6.x的夠新新新了!!!

   pip install Django==1.8.1

 

  測試一下安裝成功否

  終端下:

    python

    import django

    django.VERSION

      (1, 8, 1, 'final', 0) 成功~!

 

三,開始

1.創建博客項目

找個干凈的文件夾,終端下:

django-admin.py startproject nameblog

這里nameblog是示例,自己記得換哦

打開文件夾,或者cd nameblog/  輸入ls

發現項目創建好了~

 

2.創建博客app

終端下:cd nameblog/  剛才已經cd進去的同學這步省了

然后輸入:

python manage.py startapp blog

打開文件夾瞅一眼,發現多了個blog文件夾,

這時候blog項目app就創建好了~

 

2.簡單設置一下

打開nameblog/nameblog/settings.py

進行如下設置,也就是加上一條blog:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
)

順便換下Django默認語言把,你要是英文大神,請別鳥我,第二句是換時區,不換你就自個倒時差吧,好像永遠差8小時~

LANGUAGE_CODE = 'zh_CN'

TIME_ZONE = 'Asia/Shanghai'

 

四,測試Django運行成功否

終端下輸入,

注意現在的終端目錄還應該是nameblog/下,而不是nameblog/nameblog下,請參考有manage.py的這層目錄

好的,終端下輸入:
python manage.py runserver

打開瀏覽器,

地址:127.0.0.1:8000或者localhost:8000

看到淡藍色,提示,Django工作了~

說明項目搭建成功~

如果 python manage.py runserver跑不起來

可能8000端口被占用了,輸入:

python manage.py runserver 8001

 

五,博客數據庫

首頁要知道

Django是一個基於 MVC構造的框架,模型M,視圖V和控制器C。
但是在Django中,控制器接受用戶輸入的部分由框架自行處理,
所以 Django 里更關注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式。
它們各自的職責如下:
 
層次
職責
模型(Model),即數據存取層
處理與數據相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及數據之間的關系等。
模板(Template),即表現層
處理與表現相關的決定: 如何在頁面或其他類型文檔中進行顯示。
視圖(View),即業務邏輯層
存取模型及調取恰當模板的相關邏輯。模型與模板之間的橋梁。

 

了解了Django先進的框架結構,就來一層一層的進行操作,

 

這里注意一下,我們並沒有配置數據庫,Django高級一點的版本會默認配置好,

數據庫默認是sqlite3,如果你的博客,網站有很多人訪問,sqlite3也夠用了,

如果非常多的人使用建議換為,mysql,

配置是在settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }

開始配置模型,首先打開模型文件,nameblog/blog/models.py

models.py是博客數據庫的,每個類都是數據庫中的一張表,

配置如下:

class Tag(models.Model):
    tag_name = models.CharField(max_length=20)
    create_time = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.tag_name

class Classification(models.Model):
    name = models.CharField(max_length=20)

    def __unicode__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField(blank=True)
    website = models.URLField(blank=True)

    def __unicode__(self):
        return u'%s' % (self.name)

class Article(models.Model):
    caption = models.CharField(max_length=30)
    subcaption = models.CharField(max_length=50,blank=True)
    publish_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now = True)
    author = models.ForeignKey(Author)
    classification = models.ForeignKey(Classification)
    tags = models.ManyToManyField(Tag, blank=True)
    content = models.TextField()

我們要做博客app,就要寫文章,文章需要的一些基本信息,這里都涵蓋了,

標簽,分類,作者信息,發布時間等,也可以加入自己想要的表,

保存退出,

同步數據庫,在終端輸入下:

python manage.py syncdb # 進入 manage.py 所在的那個文件夾下輸入這個命令

 
注意:Django 1.7 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate

第一次 同步數據庫會讓用戶輸入管理員帳號密碼

 

六,配置視圖

不多說了,打開nameblog/blog/views.py

from django.shortcuts import render
from blog.models import Article, Tag, Classification
from django.template import RequestContext

def blog_list(request):
    blogs = Article.objects.all().order_by('-publish_time')
    return render(request,'index.html',{"blogs":blogs})

這里看到視圖函數返回index.html,我們不是還沒有創建html首頁嗎?對的!

 

七,創建模板首頁

模板在app中默認沒有這個文件夾,需要手動創建blog/templates/

*.html文件是要放在blog/templates/下

簡單寫點html歡迎代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>fank</title>
</head>
<body>
<h1>歡迎光臨xx的博客</h1>
</body>
</html>

但是這是靜態頁面還用Django搭建起來未必太Low了吧?

加上等下我們會發布的博客文章

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>fank</title>
</head>
<body>
<h1>歡迎光臨xx的博客</h1>
<div>
{% for blog in blogs %}
  <div class="blog_body">
    <div class="blog_title"><a href="/blog/detail/?id={{ blog.id }}">{{ blog.caption }}</a></div>
    <div class="blog_info">
      <ul class="blog_info_list">
        <li>分類:{{ blog.classification }}</li>
        <li>發表時間:{{ blog.publish_time|date:"Y-m-d H:i" }}</li>
        <li>標簽:
          {% for tag in blog.tags.all %}
            {{ tag.tag_name }}
          {% endfor %}
        </li>
      </ul>
    </div>
    <div class="blog_description">
      {{ blog.content }}
    </div>
  </div>
{% endfor %}
</div>
</body>
</html>

保存退出.

 

八,配置url

直到現在,我們啟動項目

python manage.py runserver

你會發現,開始萌萌噠Django歡迎界面,說好的博客app呢?!

想要訪問到網頁,需要配置Url

打開nameblog/nameblog/urls.py

配置:

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$','blog.views.blog_list',name='blog_list'),
]

這時候,把項目跑起來

python manage.py runserver

你會發現,

歡迎光臨xx的博客

成功了~!

 

九,美化網頁

沒有css,js的網頁不是好網頁

創建blog/static/images; blog/static/css; blog/static/js

美化html,自己搞把,或者下載現成的模板,美化大家不一個品,這里就不上我的例子了

注意:靜態文件加載需要設置settings.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'collected_static')

STATICFILES_DIRS = (
    os.path.join(BASE_DIR),
    '/home/icgoo/pywork/fankblog/blog/static/',
)

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
)

收集靜態文件,終端下:

python manage.py collectstatic

再次打開萌萌噠的首頁,讓人眼前一亮,有沒有?...

 

十,Django后台

又人開始吐槽了,做了這么久的博客app,到現在一篇文章都木有啊,什么鬼!

Django給我們提供了一個強大的后台管理,我們通過它來管理文章

打開blog/admin.py,沒有則新建

from django.contrib import admin
from .models import Article
 
 
admin.site.register(Article)

只需要這三行代碼,我們就可以擁有一個強大的后台!

提示:urls.py中關於 admin的已經默認開啟

 

運行服務器,

python manage.py runserver

訪問 http://localhost:8000/admin/ 輸入設定的帳號和密碼

點擊 Articles,動手輸入 添加幾篇文章,

再訪問首頁

發現文章出現在首頁了~!!

 

十一,代碼托管到Github

確保目錄在nameblog/

$ git init    //初始化

$ touch README

$ git add README   //更新README文件

$ git commit -m 'first commit'//提交更新,並注釋信息“first commit”

$ git remote add origin git@github.com:yourproject/nameblog.git   //連接遠程github項目  

$ git push -u origin master   //將本地項目更新到github項目上去

 

現在查看github上面的blog項目,

是不是發現已經將本地中的README文件更新上來了。

:) 恭喜!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM