Django 入門例子2

前言

上次寫了第一個入門的小例子,今天呢,咋們來搭建一個博客網站,所以今天會學到django中的model,以及template模板。
上一篇地址

代碼

  1. 首先, 我們在之前的根目錄mysite/下面新建一個app,起名叫blog:

    python manage.py startapp blog
    一個項目是可以有很多個APP的喲

  2. 接下來我們創建一個實體類,首先進入blog/models.py,在底部加入如下代碼:

    class Blog(models.Model): #繼承自models.Model
        title = models.CharField(max_length=20) #博客的標題 最大長度設置為20個字符
        body = models.TextField() #博客的內容
        timestamp = models.DateTimeField() #發表博客的日期及時間
    

    這就是我們的博客實體模型了,就是Java中的bean對象。到時候我們可以通過這個類對數據庫進行訪問,而不需要寫SQL語句!!!我們這里使用的數據庫是默認的sqlite3,可以在mysite/settings.py中看到。因為這個是python自帶的數據庫,所以不需要額外安裝。

  3. 接下來進入mysite/settings.py,找到INSTALLED_APPS,加入'blog',結果如下所示

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',#也就是我們剛剛創建的blog文件夾,我們的blog是一個APP喲
    ]
    

    把blog加入到上面之后,django就知道要包含blog這個APP了,之后就可以通過Blog對象建表了。

  4. 讓django幫我們自動生成Blog對應的表!

    在根目錄執行python manage.py makemigrations,這句話是告訴django,你對models做了一些改變,在這里,我們是增加了一個Blog類。

    然后輸入python manage.py migrate,完成建表。

    通過輸出的信息你會發現建立了很多表,因為上面有很多APP,里面有各種表喲。我們的只是其中一個罷了。

    Applying blog.0001_initial... OK 這句話就是建立我們的表啦~

  5. 創建一個后臺管理員,管理我們的各種models,這里也就是管理我們的Blog表。

    執行:python manage.py createsuperuser,然后按照提示輸入你要注冊的用戶名,郵箱以及設置密碼就可以了。

  6. 將我們的Blog注冊到管理員,讓管理員能夠訪問到。

    打開blog/admin.py,加入下面幾行代碼:

    from .models import Blog #從當前目錄的models.py中導入Blog類
    
    # Register your models here.
    admin.site.register(Blog)
    

    這樣我們就可以在后臺訪問到Blog了

  7. 啟動服務 python manage.py runserver

  8. 瀏覽器輸入: localhost:8000/admin

    然后輸入你剛剛注冊的用戶名和密碼,接下來你就可以看到如下畫面啦


    管理員界面

    上面的Blog就是我們剛剛注冊的喲,我們點擊add,然后在頁面中輸入我們的內容:


    輸入內容

    然后點擊SAVE即可保存到數據庫。

    所以以后你可以很方便的管理你的數據庫中的表,只需要調用admin.site.register()方法就可以在后臺查看到你的表了。

  9. 接下來,我們在blog/文件夾下面新建一個目錄,叫templates,用來存放html文件。

    這時候,我們的文件目錄應該是這樣的:


    目錄結構
  10. 在網頁中展示我們的Blog:

    首先我們要在blog/templates目錄下新建一個blog_list.html文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>My Blog</title>
    </head>
    <body>
    
        {% for blog in blog_list %}
            <div>
            <h1>{{ blog.title }}</h1>
            <p>{{ blog.body }}</p>
            <span>{{ blog.timestamp|date:'Y-M-D' }}</span>
            </div>
        {% endfor %}
    
    </body>
    </html>
    

    上面的網頁在django中是稱作模板,在里面可以寫很多動態的元素,由django渲染后生成html,例如 {% for blog in blogList %} {% endfor %}是一個迭代器,中間的元素會被迭代很多次,所以可以動態生成html標簽。{{ blog.title }}這個是取blog的title屬性的值。

  11. 我們要在views.py中取出數據庫中的Blog對象,然后交給這個html:

    打開blog/views.py,加入如下代碼:

    from .models import Blog #導入Blog類
    
    # Create your views here.
    def blog_list(request): #方法不能漏掉一個參數
        blog_list = Blog.objects.all()#獲取數據庫中Blog的所有對象
        return render(request, 'blog_list.html', {'blog_list': blog_list}, )#把數據交給blog_list.html進行渲染
    

render()的第一個參數是request,第二個是html模板,第三個是字典,也就是我們要傳遞到html的參數,html訪問的是字典的key。所以你現在可以回過頭看看我們上面編寫的html了!

  1. 最后讓瀏覽器能夠找到我們的頁面,在mysite/urls.py中進行配置:

    from django.conf.urls import include, url
    from django.contrib import admin
    from blog.views import blog_list #增加這行  導入blog_list方法
    urlpatterns = [
        url(r'^polls/', include('polls.urls')),
        url(r'^admin/', admin.site.urls),
        url(r'^blog/',blog_list)#增加這行 用blog_list方法渲染
    ]
    

相信大家看過上一篇的對上面的代碼應該不陌生了。

  1. 啟動服務進行訪問:

    瀏覽器輸入:http://localhost:8000/blog/

    就可以看到剛剛用admin增加的Blog對象了!!!


    效果圖

后記

這篇文章只是走馬觀花的過一遍流程而已,讓我們再理清一下思路:

  1. 新建了一個app,要在mysite/settings.py中進行注冊
  2. 實體模型寫在models.py中,一個實體類就對應了數據庫的一張表。
  3. 在views.py中我們可以通過實體類對數據庫進行訪問,不需要寫SQL語句。常用的獲取對象的方法我們下一篇再講
  4. views.py獲取的對象可以通過字典的形式傳到template中,然后通過模板語言進行訪問,動態生成html
  5. 通過配置mysite/urls.py,將URL鏈接與方法綁定起來。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容