Django快速學習搭建blog項目


  新手學習Django,本文學習的文檔是《Django Web開發指南》。好了我也是新手,沒什么好說了,go!~

首先先確定環境,我是在linux(Ubuntu14.04 gnome)下。

自帶python2.7.6

我是用mysql數據庫,沒有的請下載 sudo apt-get install mysql-server-5.5

接下來准備下載Django了,首先我是用sudo pip install Django==1.7.1(如果沒有pip工具,請自行下載或則其他方式下載Django)。

下載完Django之后接着下載MySQL-python(貌似是python跟mysql進行交互的東西吧) pip install MySQL-python

#終端內進入python
>>>import django
>>>django.VERSION   #在python命令行中測試django是否成功安裝

>>>import MySQLdb   #如果沒有任何錯誤就是安裝成功了

准備好了,接下來就是blog項目。

打開終端進入你要建立的項目下面

~tool/myproject $ django-admin.py startproject mysite  #建立一個Django的項目mysite

~tool/myproject $ cd mysite

~tool/myproject/mysite$ ls -l

總用量:24 (total:24)

-rwxr-xr-x 1 zrl zrl   249 12月 11 20:59 manage.py
drwxrwxr-x 2 zrl zrl  4096 12月 11 21:05 mysite

~tool/myproject/mysite$ ./manager.py runserver   #或者python manager.py runserver都可以

 

#如果出現下面的錯誤

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

 


#解決方法

python manage.py migrate   #它可以讓我們在修改Model后可以在不影響現有數據的前提下重建表結構。

~/tool/microblog/mysite$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying sessions.0001_initial... OK

 

#最后在啟動一下

~/tool/microblog/mysite$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
December 11, 2014 - 13:04:36
Django version 1.7.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

 


出現這個就成功啦~

接下來就是用manage.py創建這個blog app

~/tool/microblog/mysite$ ./manage.py startapp blog

~/tool/microblog/mysite$ ls -l blog/
總用量 20
-rw-r--r-- 1 zrl zrl   63 12月 12 17:55 admin.py
-rw-r--r-- 1 zrl zrl    0 12月 12 17:55 __init__.py
drwxrwxr-x 2 zrl zrl 4096 12月 12 17:55 migrations
-rw-r--r-- 1 zrl zrl   57 12月 12 17:55 models.py
-rw-r--r-- 1 zrl zrl   60 12月 12 17:55 tests.py
-rw-r--r-- 1 zrl zrl   63 12月 12 17:55 views.py

 

接着需要去setting.py文件中找到INSTALLED_APPS元組.把你的app以模塊的形式添加到元組里,就像這樣

INSTALLED_APPS=(
'blog',
)

 

然后去blog中,打開models.py 加入

class BlogPost(models.Model):
     title = models.CharField(max_length=150)
     body = models.TextField()
     timestamp = models.DateTimeField()

 

接着就是修改 settings.py文件,找到DATABASE

#連接一下數據庫,我的是用mysql

 

DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'djangodb',
          'HOST': 'localhost',
          'USER': 'root',
          'PASSWORD': 'password',
      }
  }

 


現在你可以告訴Django用你提供的連接信息去連接數據庫並且設置應用程序所需的表。

命令很簡單:./manage.py syncdb

~/tool/microblog/mysite$ ./manage.py syncdb
Operations to perform:
  Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying sessions.0001_initial... OK

You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'user'): username 賬號
Email address: 123456789@163.com 郵箱
Password:            密碼
Password (again):       再輸入一次密碼
Superuser created successfully.

上面這樣就算成功了。。

打開blog中的models.py文件

  #添加以下的代碼

from django.db import models
   from django.contrib import admin
  
   class BlogsPost(models.Model):
       title = models.CharField(max_length=150)
       body = models.TextField()
       timestamp = models.DateTimeField()
      
 admin.site.register(BlogsPost)

 

 
 繼續重新輸入./manage.py syncdb,如果出現

Operations to perform:
  Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
  No migrations to apply.
  Your models have changes that are not yet reflected in a migration, and so won't be applied.
  Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
The following content types are stale and need to be deleted:

    blog | blogpost

Any objects related to these content types by a foreign key will also
be deleted. Are you sure you want to delete these content types?
If you're unsure, answer 'no'.

    Type 'yes' to continue, or 'no' to cancel: yes

 

上面已經寫了,要運行./manage.py makemigrations 然后再運行 ./manage.py migrate

然后繼續 運行 ./manage.py syncdb

~/tool/microblog/mysite$ ./manage.py makemigrations
~/tool/microblog/mysite$ ./manage.py migrate
~/tool/microblog/mysite$ ./manage.py syncdb

接着就可以開啟看看效果了

 

貌似這效果看的不是很爽,我們來改改吧。打開blog下的models.py修改一下

  

from django.db import models
   from django.contrib import admin
  
   class BlogsPost(models.Model):
       title = models.CharField(max_length=150)
       body = models.TextField()
       timestamp = models.DateTimeField()
  
   class BlogPostAdmin(admin.ModelAdmin):
      list_display = ('title','timestamp')
 
  admin.site.register(BlogsPost,BlogPostAdmin)

 

從Django的角度看,一個頁面具有三個典型的組件:

一個模板(template):模板負責把傳遞進來的信息顯示出來。

一個視圖(viw):視圖負責從數據庫獲取需要顯示的信息。

一個URL模式:它負責把收到的請求和你的試圖函數匹配,有時候也會向視圖傳遞一些參數。

打開mysite/blog/views.py文件:

 from django.shortcuts import render
from django.template import loader,Context
from django.http import HttpResponse
from blog.models import BlogsPost

# Create your views here.
def archive(request):
    posts = BlogsPost.objects.all()
    t = loader.get_template("archive.html")
    c = Context({'posts':posts})
    return HttpResponse(t.render(c))

posts = BlogPost.objects.all() :獲取數據庫里面所擁有BlogPost對象

t = loader.get_template("archive.html"):加載模板

c = Context({'posts':posts}):模板的渲染的數據是有一個字典類的對象Context提供,這里的是一對鍵值對。


創建blog模板,在archive.html將for的塊標簽(block tag),{% .... %}添加進去

   {% for post in posts %}
       <h2>{{ post.title }}</h2>
       <p>{{ post.timestamp | date:"1,F jS"}}</p>
       <p>{{ post.body }}</p>
   {% endfor %}

 

創建一個URL模式,雖然可以在mysite/urls.py中創建所需的URL模式,不過這樣會在項目和app之間制造混亂的耦合。

所以我們要將mysite/urls.py里有一行注釋的示例幾乎是我們所需要的代碼。

url(r'^blog/', include('blog.urls')),


接着在blog下面創建一個urls.py,將一下代碼寫入

   from django.conf.urls import *
   from blog.views import archive
  
   urlpatterns = patterns('',
           url(r'^$',archive),
           )

來啟動一下,看看效果如何 ./manage.py runserver

貌似看起來好搓。我們來稍微修改一下吧,看起來爽點。

接着在blog/templates下創建一個base.html將代碼寫入

<html>
      <style type="text/css">
        body{color:#efd;background:#453;padding:0 5em;margin:0}
        h1{padding:2em 1em;background:#675}
        h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
        p{margin:1em 0}
      </style>
     
      <body>
        <h1>Just-so-so</h1>
        {% block content %}
        {% endblock %}
      </body>
</html>

 

再將blog/template下的archive.html的文件,引用base.html且和他的'content'塊

{% extends "base.html" %}
  {% block content %}
      {% for post in posts %}
      <h2>{{  post.title }}</h2>
      <p>{{ post.timestamp | date:"1,F jS"}}</p>
      <p>{{ post.body }}</p>
      {% endfor %}
  {% endblock %}

 

再次刷新頁面

終於完成了這個blog,雖然碰到了很多問題。但是學習到的東西還是很多的~


                                                                      
                                       


免責聲明!

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



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