Day42-Django之模板(templates)和模型(model)

    今天繼續Django之旅,沿用昨天的案例開始下一步。

修改項目的視圖文件views,注意render這個方法,更簡便更智能。加載模板、創建上下文、創建響應對象等都靠render:

from django.shortcuts import render
import datetime
# 不用再導入get_template、Template、Context或HttpResponse了


def current_datetime(request):
    now = datetime.datetime.now()  # 計算 now
    return render(request, 'current_datetime.html', {'current_date': now})
    # 加載模板、創建上下文、渲染模板和創建 HttpRe-sponse 對象全由 render() 調用代替了。
    # render()的返回值是一個HttpResponse對象,因此在視圖中可以直接返回那個值。
    # render()的第一個參數是請求對象,第二個參數是模板名稱,第三個單數可選,是一個字段,
    # 用於創建傳給模板的上下文。如果不指定第三個參數,render() 使用一個空字典。


創建模板templates文件夾(所有的HTML文件都放這裏面):

templates顧名思義,就是放置模板文件的地方,比如HTML文件,以便後續生成網頁的時候調用。可以用Python相關的語法創建HTML文件,比如jinja2。更膩害的是,模板還可以繼承。用創建統一的模板格式,然後生成各種不同的子模板(比如head和body模板,或者不同url的模板。),子模板可以節約代碼咯,避免大量的HTML代碼重複,並且需要修改HTML的時候只需要改基模板就可以了,其他的所有模板馬上能得到效果呈現:

基模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <h1>My helpful timestamp site</h1>
    {% block content %}{% endblock %}

    {% block footer %}
    <hr>
    <P>Thanks for visiting my site.</P>
    {% endblock %}
</body>
</html>

current_datetime模板

{% extends 'base.html' %}

{% block title %}The current time{% endblock %}

{% block content %}
    <p>It is now {{ current_date }}.</p>
{% endblock %}

需要注意的是,子模板current_datetime裏面的代碼就是jinjia2的語法。你要問什麼是‘金甲兔’?其實就是基於Python的一種模板引擎,有自己的語法,可以替代PHP哦據說,應用很廣泛。反正我也是剛接觸,總之又學了一種新語法!


    好了,模板的內容大致理清楚了。開始進入模型設置!其實模型就是數據庫!!視圖views管邏輯,模板templates管表現,model當然就是管數據咯。大部分的網站是由數據庫驅動的,終於之前學到的關係型數據庫MySQL可以派上用場啦!

"對現代的 Web 應用程序而言,視圖邏輯經常需要與數據庫交互。在數據庫驅動型網站中,網站連接數據庫服
務器,從中檢索數據,然後在網頁中把數據顯示出來。此外,可能還會提供讓訪客自行填充數據庫的方式。"

原來京東啊淘寶啊這些網站的基礎邏輯就是醬紫的呀,呵呵呵不難嘛......言歸正傳,先創建一個數據庫:

吐一下槽:Navicat是不是窮瘋了,正版的居然要3999,企業版要9999......小心我換掉你!

修改settings的數據庫部分:



用Python命令創建一個應用:


好啦,model版塊初步搞定:


修改models.py文件:

from django.db import models


class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()


class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()


class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

這一步其實就是創建數據庫,跟sql語法創建的數據庫是等效的哦!流弊不?然後把項目的init文件修改爲:

用migration命令開幹:

繼續:

這兩步幹了太多事情,其實說白了就是生成了數據庫表單直接遷移數據庫!!我們回到數據庫可視化界面一看:

流弊不?連外鍵都自動生成了!!


總算親手做完了這個小案例,並且完全理解相關流程。還是很滿足的,我也不笨啊!接下來天高任鳥飛,海闊憑魚躍。該優化頁面優化,該增刪改查數據庫就去搞。一個未來的大項目正在冉冉升起......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章