今天繼續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命令開幹:
繼續:
這兩步幹了太多事情,其實說白了就是生成了數據庫表單直接遷移數據庫!!我們回到數據庫可視化界面一看:
流弊不?連外鍵都自動生成了!!
總算親手做完了這個小案例,並且完全理解相關流程。還是很滿足的,我也不笨啊!接下來天高任鳥飛,海闊憑魚躍。該優化頁面優化,該增刪改查數據庫就去搞。一個未來的大項目正在冉冉升起......