2020-04-09-Vue之前后端交互2--Flask

5.flask返回网页模板(前后端不分离,传统写法)

在项目目录中新建template文件夹,在文件夹中新建hello.html


hello.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{person.username}}</h1>
<em>{{person['age']}}</em>    #两种方式都可以显示
</body>
</html>

在app.py中编写模拟操作数据库返回网页模板等操作。
app.py:

from flask import Flask, request, render_template
from flask_cors import CORS

app = Flask(__name__)
CORS(app)    #解决跨域问题
@app.route('/')
def hello():
    uname = request.args['username']    #get方式获 得username
    print(uname)
    return 'hello'+uname

@app.route('/info')
def info():
    #假设person_info是从数据库中查找出来的数据
    person_info = {}
    person_info['username'] = 'zhangsan'
    person_info['age'] = 28
    # 返回一个网页模板;参数一:模板名称,参数二:对模板中数据进行赋值(这是一种前后端不分离的形式)
    return render_template('hello.html',person=person_info)

if __name__ == '__main__':
    app.run()

当访问127.0.0.1:5000/info时,网页显示和服务器回应(html代码):



这就是前后端不分离的开发方式。

6.一个综合实例

6.1前后端不分离,用传统方式完成

思路:当用户第一次通过get方式(跳转或输入url)进入该页面时,返回表单模板html,如果用户填写完毕,提交时(post),获取用户填写的num,并使用random模块生成随机数,绑定在random.html上并返回。
random.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/random_int" method="post">
        多少以内的随机数:<input type="name" name="num" value="{{ num }}">
        <input type="submit">
    </form>
    <div>生成的随机数为{{ random_num }}</div>
</body>
</html>

app.py:

@app.route('/random_int',methods=['GET','POST'])
def random_int():
    if request.method =='GET':

        return render_template('random.html')

    elif request.method == 'POST':

        num = int(request.form['num'])    #获取表单提交的id值,要把字符串类型转换为int类型

        random_num = random.randint(0,num)      #生成一个随机数

        return render_template('random.html', random_num = random_num, num = num)

当访问127.0.0.1:5000/random_int时,输入随机数最大值10后,点击提交,返回页面为:


这种方式会重新刷新整个页面,(这样不好),页面如果会让你复杂的话,响应时间会很长。

6.2前后端分离,用ajax请求完成

思路:前半部分与传统方式一致,但是在前端用户提交表单后,在服务器生成随机数,只返回该随机数,有前端页面自己绑定数据。不在刷新整个页面,只改变页面的一部分。
random_ajax.html:

<body>
多少以内的随机数:<input type="name" id="num">
<button onclick="getRandom()">ok</button>
<div>生成的随机数为:</div>
<div id="result"></div>
<script>
    function getRandom() {
        let input = document.getElementById('num')      //获取用户输入框
        //ajax请求
        let xhr = new XMLHttpRequest()
        xhr.open('post', 'http://127.0.0.1:5000/random_ajax', true)
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded') //post请求固定写法
        xhr.send('num=' + input.value)          //post请求发送参数的形式
        xhr.onload = function () {             //回调函数
            let div = document.getElementById('result')           //获取显示结果的div
            div.innerText = xhr.responseText                      //把服务器响应回来的值更新给相应div页面
        }
    }
</script>
</body>

app.py:

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

    if request.method =='GET':             #如果请求方式是get,返回网页模板

        return render_template('random_ajax.html')

    elif request.method == 'POST':

        num = int(request.form['num'])    #获取表单提交的num值,要把字符串类型转换为int类型

        random_num = random.randint(0,num)      #生成一个随机数

        return str(random_num)        #返回生成的随机数str数据类型


form Data:10
用户输入传给服务器的数据
image.png

Response:服务器响应数据为8
不再是html模板

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容