python第11.5节-flask开发网站

在上节课里,我们在coding.net里使用hexo搭建了自己的播客。播客是典型的静态网站,网站里每个页面的内容都是一成不变的。这节课,我们一起学习一下怎么使用python搭建动态网站。

动态网站核心技术

所谓动态网站,是指网页里的数据每天甚至每时每刻会发生变化的。比如我们看的QQ空间、微博等等。所以,相比于我们上节课学习的内容,我们会增加一个新的传输后台数据的服务。因此,动态网站核心上有这样几部分组成:

  1. web页面:这个就是我们上节课学习的网页开发核心技术。

  2. 数据服务:网页上动态的数据接口,这个是我们这节课学习的flask

  3. 数据存储:动态数据存储位置,一般会存储在数据库中,放了方便学习,我们这里直接把数据存储在文件中。

flask

在讲什么是flask之前,我先来看一个小demo:

from flask import * app = Flask(__name__) @app.route('/') def hello_world():    return 'hello world' if __name__ == '__main__':    app.run()

这就是我们使用写一个动态网站的核心代码,代码运行后,我们访问:http://127.0.0.1:5000/ 页面就可以打开自己开发的网站了。

flask核心模块介绍

有了对flask的直观印象后,我们来详细学习一下什么是flask。

  1. flask是什么
    flask官方对自己的介绍如下:

Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎。

简单来说,flask就是一个针对网页的服务端框架,内置一个渲染html的引擎。通过flask,我们可以把:响应http的url请求、加工服务端数据和返回html内容整合在一起的一个web服务框架。
2. 安装flask
有了pip,安装flask非常简单,我们只需要pip install Flask命令即可完成flask的安装。
3. flask核心方法
从上面的demo代码中,我们可以看出,flask核心有这样几部分组成:
1)引入flask from flask import *
2)定义flask对象 app = Flask(__name__)
3)编写响应url路径的函数

@app.route('/') def hello_world():    return 'hello world'

注意看,这个代码,相比于我们正常编写的函数,多了一个@app.route('/') 注解,这个注解的意思就是这个函数应该响应我们url请求的哪个路径。
4)运行flask程序app.run()

任务清单项目实例

下面,我们通过网页版任务清单项目。来完整体验一下flask的完整开发流程。

  1. 新建flask项目,注意看,pycharm已经很智能的把todo.py帮我们创建好了,里面已经有了flask的核心代码。

  2. 任务清单类todo
    项目的核心逻辑是任务清单的维护,我们新增todo类,看代码:

#!/usr/bin/python # -*- coding: UTF-8 -*- class Todo:    def __init__(self):        self.taskList = []        self.__fileLocation__ = "./todo.txt"        self.__loadTask__()    def addTodo(self, thing):        self.taskList.append(thing)        self.__saveTodo__()        return True    def removeTodo(self, thing):        if not thing in self.taskList:            return False        else:            self.taskList.remove(thing)            self.__saveTodo__()            return True    def searchTodo(self, thing):        for todo in self.taskList:            if thing in todo:                return todo        return None    def getAllToto(self):        return self.taskList    def __loadTask__(self):        file = open(self.__fileLocation__, 'r')        # 换行符        self.taskList = []        for task in file.readlines():            self.taskList.append(task.replace('\n', ''))    def __saveTodo__(self):        file = open(self.__fileLocation__, 'w')        file.write('\n'.join(self.taskList))        file.close()

todo类完成了对任务清单的查询、新增、删除、修改等操作。
3. 写任务列表页面
我们在templates目录里新增index.html文件。在里面增加展示任务列表的代码:

<!doctype html> <html> <head>    <meta charset="UTF-8">    <title>任务清单</title> </head> <body> <p>    任务任务<a href="/delete?todo=">删除</a> </p> <p>    任务任务<a href="/delete?todo=">删除</a> </p> <form action="/insert" method="post">    <input type="text" name="todo">    <button type="submit">新增</button> </form> </body> </html>

  1. 替换成动态数据
    第三部做的网页是静态的,我们需要从服端获取数据,因此现在todo.py 里新增获取数据的方法:

from Todo import * todo = Todo() @app.route('/') def list():    return render_template('index.html', todoList=todo.getAllToto())

这个函数在获取数据后,会将数据渲染到index.html页面中并返回浏览器。html里的代码对应改动如下:

{% for todo in todoList %}    <p>        {{ todo }}        <a href="/delete?todo={{todo}}">删除</a>    </p>    {% endfor %}

注意看 {%}的语法。这个就是html加载python返回数据的Jinja2模板代码了。

  1. 新增任务
    新增任务首先需要在网页里增加一个form表单:

<form action="/insert" method="post">        <input type="text" name="todo">        <button type="submit">新增</button>    </form>

对应的python处理如下:

@app.route('/insert', methods=['POST']) def insert():    task = request.form['todo']    todo.addTodo(task)    return render_template('index.html', todoList=todo.getAllToto())

注意这点代码:
1)我们在注解里指定了需要响应的是post请求。
2)在inset的方法体内,我们使用request.form['todo'] 语法来获取网页提交的数据。

  1. 删除任务
    删除任务和新增数据类似,我们来看python代码:

@app.route('/delete') def delete():    task = request.args.get('todo', '')    todo.removeTodo(task)    return render_template('index.html', todoList=todo.getAllToto())

到现在为止,我们的网页版任务清单就开发完成了。

淘宝是怎么开发的?

那像淘宝一样复杂的网站是怎么开发的呢?只要我们掌握了web开发的核心知识,淘宝网站也是像这样的逻辑一个功能一个功能开发完成的。就像升级打怪,我们只要一级一级的提高自己,就能开发出像淘宝、微博一样复杂的网站。


阿达老师-孩子身边的编程专家
完整课程请关注阿达老师,主页里有完整的课程目录和观看地址


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

推荐阅读更多精彩内容