Python_day22--flask简介

一、什么是Flask

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。

二、安装Flask

Flask 依赖两个外部库:Werkzeug 和 Jinja2 。Werkzeug 是一个 WSGI(在 Web 应用和多种服务器之间的标准 Python 接口) 工具集。Jinja2 负责渲染模板。

我这里使用的是anaconda2的虚拟环境,所以我们只需要进入到虚拟环境中执行

pip install flask     #或者

conda install flask

三、最基本的web开发

# 1. 导入Flask类;
from flask import Flask, render_template



# 2. 实例化Flaks类。 生成一个实例;
#       __name__结果是__main__或者模块名/包名, 根据这个参数确定项目的位置,(确定该项目的静态文件或者模板的位置);
app = Flask(__name__)


# 3. 通过路由绑定处理的视图函数;
    # URL: (eg:http://127.0.0.1:5000/ )
    # 装饰器@app.route()告诉Flask哪个url才能触发装饰器装饰的函数, 这个又专业的称为路由;
    # 定义的函数hello, return后面的返回值是想要显示在浏览器上的内容;
@app.route('/')
def hello():
    return "

hello python!


西部开源技术中心" @app.route('/westos/') def westos(): # 如何在flask程序中返回一个html页面;flask默认查找页面内容的位置为templates目录; return render_template('westos.html') if __name__ == "__main__": # 4. 运行flask应用, # 默认端口是5000, 如果想要修改端口,传递参数port=xxx; # 默认情况下该web程序只能在本机浏览器访问, 如果想要其他主机访问, 指定host="0.0.0.0" app.run(host='0.0.0.0', port=9000)

四、路由与反路由

# 1. 导入Flask类;
from flask import Flask, render_template, request, url_for



# 2. 实例化Flaks类。 生成一个实例;
#       __name__结果是__main__或者模块名/包名, 根据这个参数确定项目的位置,(确定该项目的静态文件或者模板的位置);
app = Flask(__name__)


# 3. 通过路由绑定处理的视图函数;
    # URL: (eg:http://127.0.0.1:5000/ )
    # 装饰器@app.route()告诉Flask哪个url才能触发装饰器装饰的函数, 这个又专业的称为路由;
    # 定义的函数hello, return后面的返回值是想要显示在浏览器上的内容;
@app.route('/')
def hello():
    return "

hello python!


西部开源技术中心" # 基本路由 @app.route('/westos/') def westos(): # 如何在flask程序中返回一个html页面;flask默认查找页面内容的位置为templates目录; return render_template('westos.html') # 基本路由之传递参数; @app.route('/user/') def userinfo(id): return "hello user" + str(id) # 基本路由之从浏览器的请求中获取参数 @app.route('/query_user/') def query(): # http://ip:port/query?id=12 # 从字典中, 获取id对应的value值; id = request.args.get('id') return '查询用户: user'+ str(id) # 反向路由 @app.route('/query_url') def query_url(): """通过函数, 找到该函数对应的url地址;""" return "查询的url地址为:" + url_for("query") if __name__ == "__main__": # 4. 运行flask应用, # 默认端口是5000, 如果想要修改端口,传递参数port=xxx; # 默认情况下该web程序只能在本机浏览器访问, 如果想要其他主机访问, 指定host="0.0.0.0" app.run(host='0.0.0.0', port=9001)

五、HTTP的请求方法

"""

HTTP方法:
    告知服务器, 客户端想请求页面做什么?


    GET:浏览器告知服务器, 获取页面的内容, 返回给浏览器;
    POST:浏览器告诉服务器, 通常用于表单的提交;


"""

from flask import Flask, request, render_template, redirect

app = Flask(__name__)
users = {
    'root': 'redhat',
    'westos': 'westos'
}


# 路由: http://ip:port
@app.route('/')
def index():
    return render_template('index.html')


# 基本路由之传递参数;
# http://127.0.0.1:90002/user/2
@app.route('/user/')
def userinfo(id):
    return "hello user" + str(id)


# 基本路由之从浏览器的请求中获取参数
@app.route('/query_user')
def query():
    # http://ip:port/query?id=12
    # 从字典中, 获取id对应的value值;
    id = request.args.get('id')
    return '查询用户: user' + str(id)


# 需要用到POST方法;
# 通过route装饰器传递methods参数, 可以改变HTTP的方法;
@app.route('/login', methods=['GET', 'POST'])
def login():
    # 1. 判断http方法, 如果是post;
    if request.method == 'POST':
        # 2. 获取前端用户表单提交的数据;
        username = request.form['name']
        passwd = request.form['passwd']

        # 3. 判断用户名和密码是否正确?
        if username in users:
            # 跳转到另外一个页面
            if passwd == users[username]:
                return redirect('https://www.baidu.com/')
            else:
                return "用户密码错误"
        else:
            return render_template('login.html')

    # 4. 如果不是post方法, 用户没有提交数据, 则进入登录界面;
    else:
        return render_template('login.html')


@app.route('/add', methods=['POST', 'GET'])
def add():
    if request.method == 'POST':
        # 2. 获取前端用户表单提交的数据;
        addName = request.form['name']
        addPasswd = request.form['passwd']

        # 3. 判断用户是否存在, 如果存在, 跳转到添加页面, 如果不存在, 则返回添加成功;
        if addName in users:
            return "用户已经存在, 不能添加"
        else:
            users[addName] = addPasswd
            return "用户%s添加成功" % (addName)
    return render_template('add.html')


@app.route('/delete', methods=['POST', 'GET'])
def delete():
    # 删除子典的key-value值; del 字典名称[key]
    if request.method == 'POST':
        # 2. 获取前端用户表单提交的数据;
        delName = request.form['name']
        delPasswd = request.form['passwd']

        # 3. 判断用户是否存在, 如果存在, 跳转到添加页面, 如果不存在, 则返回添加成功;
        if delName in users:
            del  users[delName]
            return   "用户删除成功!"
        else:
            return "%s用户不存在" % (delName)
    return render_template('delete.html')





#
# @app.route('/list')
# def list():
#     """列出所有的用户和用户密码, 并以表格的方式显示"""
#     pass


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9002)

六、消息提示与异常处理

"""
目标:
    如何给html页面传递变量?
            render_templates("xxx.html", message ="xxxxx", code="xxx")


    如何显示给html传递的变量?
            {{ message }}


    # 404异常处理函数;@app.errorhandler(404)

    # 抛出异常: abort
"""

from flask import Flask, request, render_template, redirect, flash, abort

app = Flask(__name__)
users = {
    'root': 'redhat',
    'westos': 'westos'
}


# 路由: http://ip:port
@app.route('/')
def index():
    return render_template('index.html')


# 需要用到POST方法;
# 通过route装饰器传递methods参数, 可以改变HTTP的方法;
@app.route('/login', methods=['GET', 'POST'])
def login():
    # 1. 判断http方法, 如果是post;
    if request.method == 'POST':
        # 2. 获取前端用户表单提交的数据;
        username = request.form['name']
        passwd = request.form['passwd']

        # 3. 判断用户名和密码是否正确?
        if username in users:
            # 跳转到另外一个页面
            if passwd == users[username]:
                return redirect('https://www.baidu.com/')
            else:
                message = "用户密码错误"
                return render_template('login.html', message=message)
        else:
            message = "用户不存在, 请注册"
            return render_template('login.html', message=message)
    # 4. 如果不是post方法, 用户没有提交数据, 则进入登录界面;
    else:
        return render_template('login.html')


# 404异常处理函数;@app.errorhandler(404)
@app.errorhandler(404)
def not_found(e):
    return render_template('404.html')


# 抛出异常: abort
@app.route('/users/')
def user(id):
    if int(id) in range(1, 10):
        return "hello user" + str(id)
    else:
        abort(404)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9003)


你可能感兴趣的:(Python_day22--flask简介)