网页的MVC模式简介

#! /usr/bin/env python3

# -*- coding:utf-8 -*-

 

#MVC:Model-View-Controller 模型-视图-控制器 

#Python处理URL的函数就是C(controller),controller负责业务逻辑,比如检查用户名是否存在,取出用户信息等

#包含变量的HTML代码就是模板V(view),view负责显示逻辑,展现页面,通过简单地替换一些变量,view最终输出的就是用户看到的HTML。

#Model 是用来存储传递给VIEW的变量的。通常Model就是一个dict。

 

#将flask_1.py中的例子改成MVC模式:

 

from flask import Flask,request,render_template

app=Flask(__name__)

@app.route('/',methods=['GET','POST'])

def home():

    return render_template('home.html')

    @app.route('/signin',methods=['GET'])

def signin_form():

    return render_template('form.html')

@app.route('/signin',methods=['POST'])

def signin():

    username=request.form['username']

    password=request.form['password']

    if username=='admin' and password=='password':

        return render_template('signin-ok.html',username=username)        

    return render_template('form.html',message='Bad username or password',username=username)

if __name__=='__main__':

    app.run()

 

#Flask 通过render_template()函数来实现模块的渲染。和web框架类似,Python的模板也有很多种,Flask默认支持的模板是jinja2.

 

#home.html 用来显示首页的模板:

'''

<html>

<head>

    <title>Home</title>

</head>

<body>

    <h1 style="font-style:italic">Home</h1>

</body>

</html>

'''

 

#form.html 用来显示登录表单的模板:

'''

<html>

<head>

    <title>Please Sign In</title>

</head>

<body>

    {% if message %}

    <p style="color:red">{{message}}</p>

    {% endif %}

    <form action="/signin" method="post">

        <legend>Please sign in:</legend>

        <p><input name="username"placeholder="Username"value="{{username}}"></p>

        <p><input name="password"placeholder="Password" type="password"</p>

        <p><button type="submit">Sign In</button></p>

    </form>

</body>

</html>

'''

#signin-ok.html 登录成功的模板

'''

<html>

<head>

    <title>Welcome,{{username}}</title>

</head>

<body>

    <p>Welcome,{{username}}!</p>

</body>

</html>

'''

 

#登录失败的模板呢?我们在form.html中加了一点判断,把form.html重用为登录失败的模板。

#最后,一定要把模板放到正确的templates目录下,templates和webMVC.py在同级目录下.

 

#通过MVC,我们在Python代码中处理M(model)和C(controller),而v(view)是通过模板处理的,这样,我们就成功地把Python代码和HTML代码最大限度地分离了。

 

#使用模板的另一大好处是,模板改起来很方便,而且,改完保存后,刷新浏览器就能看到最新的效果,这对于调试HTML、CSS和JavaScript的前端工程师来说实在太重要。

 

#在jinja2模板中,我们用{{name}}表示一个需要替换的变量。很多时候,还需要循环、条件判断等指令语句,在jinja2中,用{%...%}表示指令。

#比如循环输出页码:

'''

{% for i in page_list %}

    <a href="/page/{{i}}</a>

{% endfor %}

'''

#如果page_list是一个list:[1,2,3,4,5],上面的模板将输出5个超链接。

#除了jinja2,常见的模板还有:

'''

Mako:用<%...%>和${xxx}的一个模板

Cheetah:也是用<%...%>和${xxx}的一个模板

Django:Django是一站式框架,内置一个用{%...%}和{{xxx}}的模板

'''

原文地址:https://www.cnblogs.com/Ting-light/p/9548194.html