Flask框架基础

Flask框架基础

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。


一.flask基础绪论

1.安装flask

pip install flask

2.导入Flask

from flask import  Flask

3.实例化一个Flask对象

app = Flask(__name__)

4.基本路由:通过路由绑定一个视图函数

@app.route('/'): 告诉Flask哪个URL才能出发对应的函数, 又称为路由;

@app.route('/')
def index():
    return  "<h1>hello world</h1>"
    
@app.route('/login/')
def login():
    return  "login"

5.运行Flask应用,可以指定ip和端口

app.run()运行应用,可以加地址也可以不加地址

app.run('0.0.0.0', 9000)

在这里插入图片描述
在这里插入图片描述

二.路由与变量规则

常见路由的规则
1. url的一部分可以标记为变量<变量名>
2. flask中路由里面的变量常见类型: int, string, float, path, uuid
from flask import Flask, request

app = Flask(__name__)
# 常见路由的规则
#   1. url的一部分可以标记为变量<变量名>
#   2. flask中路由里面的变量常见类型:
#           int, string, float, path, uuid

@app.route('/<int:id>/comments/')
def comment1(id):
    return "Comment id: %s" %(id)

@app.route('/welcome/<string:user>/')
def welcome(user):
    app.logger.debug('this is a debug')
    app.logger.warning('this is a warn')
    return user + "用户, 欢迎来到westos"


# 特殊的url地址: http://www.baidu.com/query?id=123&name=westos
@app.route('/query')
def query():
    # 获取url地址里面key值对应的value值;
    id = request.args.get('id')
    name = request.args.get('name')
    return "id: %s, name: %s" %(id, name)


app.run()

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

三.URL构建与反向URL

from flask import Flask, request, url_for

app = Flask(__name__)

@app.route('/welcome/<string:user>/')
def welcome(user):
    return user + "用户, 欢迎来到westos"


@app.route('/path/')
def path():
    print(request.headers)
    # 查看默认url地址的请求方法;
    # methods is a list of methods this rule should be limited
    # to (``GET``, ``POST`` etc.).  By default a rule
    # just listens for ``GET``
    print(request.method)
    # url_for: 根据函数名, 反向生成url地址
    print("用户正在访问url地址:%s" % (url_for(endpoint="welcome", user="villa")))
    return "用户正在访问url地址:%s" % (url_for(endpoint="welcome", user="villa"))
app.run(port=6666)

在这里插入图片描述
在这里插入图片描述

四.常见http方法之post与get

1.常见HTTP请求方法

GET: 1). 获取信息 2). 提交的信息会展示在url中
POST: 1). 提交信息, 不在url里面展示, 有利于数据的安全性

2.默认路由接受的请求方法为____get____

指定接收多个HTTP请求方法:[email protected]('/login/', methods=['GET', 'POST'])

3. 判断用户请求的HTTP方法:request.method

4.获取用户POST请求提交的表单数据: request.form['user']

5.模板渲染(jinja2)

  • python中生成html不易修改与维护, 所以将html的内容独立到templates目录中;
  • 1). 去当前项目目录下寻找templtes是否存在?再去判断templates目录下是否有login.html文件?
  • 2). 读取这个login.html文件的内容, 作为render_template的返回值; ===>render_template('login.html')
  • 3). 最终返回给用户浏览器;

6. 重定向和错误

return render_template('login.html', message="用户名或者密码错误")

7. 网络404处理

# 抛出异常
@app.route('/user/<int:user_id>/')
def user(user_id):
    if 0<int(user_id)<=100:
        return  "欢迎访问: %s" %(user_id)
    else:
        abort(404)

以上知识点汇总:

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

# redirect

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        print(request.form)
        # 1. 如何获取到用户提交的信息呢?
        user = request.form['user']
        passwd = request.form['passwd']

        # 2. 判断用户名和密码是否正确
        if user == 'root' and passwd =='villa':
            # 如果登陆成功, 跳转到主页;
            return redirect(url_for('index'))
        else:
            # 如果登陆失败, 重新登陆;
            return  render_template('login.html', message="用户名或者密码错误")

    else:
        # 用户是GET请求, 返回登陆的html页面
        # 1. 读取login.html文件的内容
        # 2. 将读取的内容返回给用户界面
        return render_template('login.html')

# 404异常处理: 类似于捕获异常
@app.errorhandler(404)
def not_found(e):
    return  render_template('404.html')
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181029195453774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTE3OTcwOQ==,size_16,color_FFFFFF,t_70)

# 抛出异常
@app.route('/user/<int:user_id>/')
def user(user_id):
    if 0<int(user_id)<=100:
        return  "欢迎访问: %s" %(user_id)
    else:
        abort(404)

app.run(port=5002)

在这里插入图片描述
(登陆成功之后跳转至首页)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41179709/article/details/83512369
今日推荐