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命令开干:

继续:

这两步干了太多事情,其实说白了就是生成了数据库表单直接迁移数据库!!我们回到数据库可视化界面一看:

流弊不?连外键都自动生成了!!


总算亲手做完了这个小案例,并且完全理解相关流程。还是很满足的,我也不笨啊!接下来天高任鸟飞,海阔凭鱼跃。该优化页面优化,该增删改查数据库就去搞。一个未来的大项目正在冉冉升起......

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