Qingquan-Li / blog

My Blog
https://Qingquan-Li.github.io/blog/
132 stars 16 forks source link

理解 Django 的 MTV 模式:创建一个简单页面 #73

Open Qingquan-Li opened 6 years ago

Qingquan-Li commented 6 years ago

理解 Django 的 MTV(Model+Template+View)模式,创建一个 「Hello + 输出用户名」简单的静态页面

开发环境:

- macOS 10.12.6
- python3.5
- Django 1.11.7

安装 Django

如本机安装的 Python 版本为 python3.5 ,所以使用 pip3.5 安装

pip3.5 install django

查看 Django 版本

>>> import django
>>> django.VERSION
(1, 11, 7, 'final', 0)

一、创建 Django project

  1. 创建一个文件夹,命名为 root(或其他命名),在终端中 cd 到文件 root 下
  2. 使用 django-admin 命令创建一个项目,命名为 firstsite(或其他命名): django-admin startproject firstsite
  3. 在 root/firstsite/manage.py 中第一行的 python 改为 python3.5(此项目开发环境使用的是 python3.5 ):#!/usr/bin/env python3.5

二、创建 Django App

每个 Django project 中可以有多个 Django apps,可以想成是类似模组的概念。

  1. 在 终端中 cd 到文件 root/firstsite 下,输入 python3.5 manage.py startapp firstapp 。注:manage.py 是 Django 提供的命令行工具
  2. 在 root/firstsite/firstsite/settings.py 中找到 INSTALLED_APPS ,在末尾添加刚创建的 app 名字(这里是 firstapp )

三、创建数据库

创建数据库后就可以看到 Django 网站的初始界面了。

  1. 合并数据库:在 终端中 cd 到文件 root/firstsite 下,运行以下 2 行命令合并数据库:1⃣ python3.5 manage.py makemigrations 2⃣ python3.5 manage.py migrate
  2. 运行服务器(数据库): python3.5 manage.py runserver 。访问 http://127.0.0.1:8000http://localhost:8000 即可看到 Django 网站的初始界面

init_page

四、在 Model 中创建数据表

接下来的四、五、六、七步,都是为了创建下面这个网页做调整

hello_fatli

  1. 在 modle 中创建数据表:在 root/firstsite/firstapp/models.py 中定义一个类和相应的数据字段

    from django.db import models
    # 创建数据表:在 models.py 文件中定义一个类和相应的数据字段
    class People(models.Model):
    # models.CharField 为字段的数据类型,以下字段的数据类型为char字符类型
    # 3个参数分别代表:数据库中该字段可以为空;表单(验证)中可以不填写;最大长度为200
    name = models.CharField(null = True, blank = True, max_length = 200)
    job = models.CharField(null = True, blank = True, max_length = 200)
  2. 合并数据库:在 终端中 cd 到文件 root/firstsite 下,运行以下 2 行命令合并数据库:1⃣ python3.5 manage.py makemigrations 2⃣ python3.5 manage.py migrate注:每次 model 层有改动都需要输入这 2 行合并数据库。

五、在 View 中获取 Model 中的数据

在 root/firstsite/firstapp/views.py 中创建视图函数,从而获取 model 中的数据:

from firstapp.models import People
def first_try(request):
  person = People(name="Fatli", job="programmer")
  return

六、引入 Template 模板对数据渲染

引入 Template ,用模板把数据渲染在网页中。在 root/firstsite/firstapp/views.py 中继续完善:

from firstapp.models import People
from django.shortcuts import render, HttpResponse
from django.template import Context, Template   # 引入 Template 模版对数据渲染

# 在 View 中获取 Model 中的数据:在 views.py 文件中创建视图函数
def first_try(request):
    person = People(name = 'Fatli', job = 'programmer')
    html_string = '''
        <html>
            <head>
                <meta charset="utf-8">
                <title>firstapp</title>
            </head>
            <body>
                Hello, {{ person.name }}
            </body>
        </html>
    '''

    t = Template(html_string)        # 把html_string的内容转变为字符模板 
    c = Context({ 'person':person }) # 接收一个字典类型的参数
    web_page = t.render(c)           # 通过render()方法进行渲染(此时网页依然为字符串格式),储存在一个对象中
    # 把渲染后的(字符串)对象变成一个http对象。注:所有的视图函数都是接收一个request对象,返回一个response对象
    return HttpResponse(web_page)     

七、在 URL 中分配网址

在 root/firstsite/firstsite/urls.py 中分配网址,让链接可以被访问:

from django.conf.urls import url
from django.contrib import admin
from firstapp.views import first_try # 新添加代码

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^first_try/', first_try), # 在 URL 中分配网址
]

此时访问 http://127.0.0.1:8000/first_try/ 即可看到一个「Hello + 输出用户名」的简单页面