今天继续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的时候只需要改基模板就可以了,其他的所有模板马上能得到效果呈现:
基模板
{% block title %}{% endblock %}
My helpful timestamp site
{% block content %}{% endblock %}
{% block footer %}
Thanks for visiting my site.
{% endblock %}
current_datetime模板
{% extends 'base.html' %}
{% block title %}The current time{% endblock %}
{% block content %}
It is now {
{ current_date }}.
{% 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命令开干:
继续:
这两步干了太多事情,其实说白了就是生成了数据库表单直接迁移数据库!!我们回到数据库可视化界面一看:
流弊不?连外键都自动生成了!!
总算亲手做完了这个小案例,并且完全理解相关流程。还是很满足的,我也不笨啊!接下来天高任鸟飞,海阔凭鱼跃。该优化页面优化,该增删改查数据库就去搞。一个未来的大项目正在冉冉升起......