首页 > 其他分享 >Flask框架入门

Flask框架入门

时间:2023-04-01 21:25:50浏览次数:32  
标签:__ 入门 框架 get Flask app session name

Flask框架也是Python的同步web框架,Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架顺便总结一下Python的同步web框架有Django(大而全,适合大型网站开发)、Flask(小而精,适合小型网站开发);异步web框架有fastapi和sanic。
接下来咱详细的研究一下flask框架吧!

目录

一、快速使用Flask框架

安装框架

pip install Flask

快速使用

from flask import Flask

app = Flask(__name__)


@app.route('/') # 装饰器的方式注册路由
def hello_world():
    return 'Hello World!'


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

Flask项目的目录结构
image

二、配置文件的配置方式

配置文件的配置方式有好几种,

  1. 配置方式一:直接在核心逻辑代码里面配置(测试用)
app.debug=True  # 调试模式,提示信息更详细,修改代码不需要重启,自动重启
app.secret_key='dasdfasdfasd'  # 秘钥,只能 放debug和secret_key
  1. 配置方式二:直接使用app.config设置
app.config['DEBUG']=True
app.config['SECRET_KEY']='sdfasdfasd'
  1. 配置方式三:跟Django的路由配置类似使用py文件(不常用)
app.config.from_pyfile("settings.py")
  1. 配置方式四:使用写类的方式,常用方法
app.config.from_object('settings.DevelopmentConfig')
app.config.from_object('settings.ProductionConfig')
  1. 配置方式五:通过环境变量配置
app.config.from_envvar("环境变量名称")
  1. 配置方式六:通过json文件的方式
app.config.from_json("json文件名称")
JSON文件名称,必须是json格式,因为内部会执行json.loads
  1. 配置方式七:字典格式(配置中心)
app.config.from_mapping({'DEBUG': True})

三、路由系统

  1. 路由的本质
    flask是基于装饰器的,大部分都用装饰器来做,少量可以抽取到一个urls.py种、flask路由的本质是app对象的add_url_rule完成路由的注册。
  2. 路由的参数
rule             URL规则
view_func        视图函数名称
defaults = None  默认值, 当URL中无参数,函数需要参数时,使用defaults = {'k': 'v'}为函数提供参数
endpoint = None, 路径的别名,名称,用于反向解析URL,即: url_for('名称')
methods = None, 允许的请求方式,如:["GET", "POST"]

四、通过登录的逻辑快速了解框架

  1. 后端代码login.py
from flask import Flask, request, render_template, redirect, session,jsonify

app = Flask(__name__)

# 要使用session,必须设置秘钥,秘钥是配置信息
app.secret_key = 'asdfasdfa33aef3aefads'

USERS = {
    1:{'name':'张三','age':18,'gender':'男','text':"道路千万条"},
    2:{'name':'李四','age':28,'gender':'男','text':"安全第一条"},
    3:{'name':'王五','age':18,'gender':'女','text':"行车不规范"},
}
# 1 创建templates文件夹,写login.html
@app.route('/login', methods=['GET', 'POST'])
def index():
    # 没有request对象,使用全局的request
    # get请求,返回模板
    if request.method == 'GET':
        return render_template('login.html')  # 新手四件套之一:返回模板
    else:
        # post请求,校验数据
        # 取出前端传入的用户名密码,校验
        username = request.form.get('username')  # 等同于django的的request.POST
        password = request.form.get('password')
        if username == 'lqz' and password == '123':
            # 登录成功,保存登录状态 重定向到跟路径   新手四件套之一:重定向
            # 保存到session中,session是全局的
            session['name'] = username
            return redirect('/')
        else:
            return render_template('login.html', error='用户名或密码错误')  # 注意跟django的render区分,要模板渲染的数据,直接key=value传即可


@app.route('/')
def home():
    # 校验,登录成功,才能过来,不登录,重定向到登录页面
    if session.get('name'):  # 有值说明登录了,没有值说明没有登录
        return render_template('home.html',user_dict=USERS)
    else:
        return redirect('/login')


@app.route('/detail/<int:pk>')
def detail(pk):
    if session.get('name'):  # 有值说明登录了,没有值说明没有登录
        user_detail = USERS.get(pk)
        return render_template('detail.html', user=user_detail)
    else:
        return redirect('/login')


@app.route('/test')
def test():
    return jsonify([{'name':'lqz','age':19}])
if __name__ == '__main__':
    app.run()

  1. 前端页面的代码
    Home.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table>
    {% for k,v in user_dict.items() %}
    <tr>
        <td>{{k}}</td>
        <td>{{v.name}}</td>
        <td>{{v['name']}}</td>
        <td>{{v.get('name')}}</td>
        <td><a href="/detail/{{k}}">查看详细</a></td>
    </tr>
    {% endfor %}
</table>
</body>
</html>

Login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="post">
    <p>用户名:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <input type="submit" value="登录"> {{error}}
</form>
</body>
</html>

Detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>名字是:{{user.name}}</p>
<p>年龄是:{{user['age']}}</p>
<p>性别是:{{user.get('gender')}}</p>
<p>{{user.text}}</p>


</body>
</html>

五、通过以上小案例的总结

  1. 注册路由
app.route(路径,methods=[请求方式get,post])
  1. 新手四件套
render_template   渲染模板 跟django有区别
redirect  重定向
return 字符串 返回字符串
jsonify 返回json格式
  1. 请求的request对象,是全局的,直接导入使用即可,在不同视图函数中不会混乱
request.method  请求方式
request.form   post请求的body体的内容转成了字典
  1. session 全局的,直接导入使用即可,一定要指定秘钥
app.secret_key = 'asdfasdfa33aef3aefads'
放值:session['name']='lqz'
取值:session.get('name')
  1. 模板的渲染
兼容django的dtl
更强大,可以加括号,字典可以.get  .values()   .items()
{% for %}
  1. 转换器
@app.route('/detail/<int:pk>')

标签:__,入门,框架,get,Flask,app,session,name
From: https://www.cnblogs.com/almira998/p/17279389.html

相关文章

  • 【v4l2】Linux多媒体框架 - v4l2 core详解
    简介V4L2是Videoforlinux2的简称,是Linux中关于视频设备的内核驱动框架。常用结构体:定义在include/linux/videodev2.hstructv4l2_requestbuffers//申请帧缓冲,对应命令VIDIOC_REQBUFSstructv4l2_capability//视频设备的功能,对应命令VIDIOC_QUERYCAPstr......
  • 【入门】Go语言排序算法详解
    1、冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,并在必要时交换它们的位置,直到没有任何一对元素需要交换为止。该算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。packagemainimport"fmt"//我们定义了一个名为`bu......
  • HJ70_矩阵乘法计算量估算_入门栈使用的典型题
    反思:这题咋一看不难,但是越做坑越多,按照一开始不完善的思路无法完全通过测试。参看高赞答案,代码行数特少。但是没考虑一个括号中有三个矩阵的情况。思路:1、判断哪两个矩阵开始相乘的条件:遇到“)”时,该字符前两个矩阵开始相乘。把相乘后矩阵行列数组压入栈栈中。该题默认不存在(A(......
  • JS基础-jQuery快速入门
    作用简介:jQuery是一个JavaScript库,它极大地简化了JavaScript编程,极大简化了DOM操作及事件处理。它通过CSS选择器定位元素,并将这些元素封装在特定JavaScript对象中,然后,开发者就可以更改元素或者给元素添加事件监听器。jQuery能够处理的任何工作,都可以用既有的JavaScript代码......
  • Flask
    目录FlaskFlask和pythonweb框架介绍flask介绍快速使用登录、显示用户信息小案例配置文件方式路由系统1.路由本质2路由参数3.转换器FlaskFlask和pythonweb框架介绍pythonweb框架,本质都是一样的django:大而全,内置的app多,第三方app也多,django3.x也支持异步操作了自带的应用:adm......
  • 我如何回答编码面试问题的框架
    我讨厌编码面试已经不是什么秘密了。他们是一种糟糕的招聘方式并且容易出现误报(也就是不必要地拒绝优秀候选人)。对于大多数公司来说,提出白板式的问题并不符合他们的最大利益。不幸的是,它们是行业标准。作为一名软件工程师,您必须在求职过程中回答白板上的问题。所以,这是我如何擅......
  • 企业实践 | 如何在阿里云裸金属服务器上使用UEFI模式实践安装国产银河麒麟V10操作系统
    [点击......
  • 《Mysql基础》【Mysql触发器 新建触发器、修改触发器、删除触发器、举例】 编程入门
     --mysql数据库程序设计笔记:--=========第八章:触发器========================触发器:触发执行特定事件。(关联表对象,当特定事件出现时,触发激活)目的:保护表数据,(保证表数据完整性和一致性。)1、新建触发器:格式:createtrigger数据库名.触发器名称触发时刻inserton表名f......
  • 《Mysql基础》【Mysql表查询、去重、表连接、左连接 右连接、子表查询、排序、分组等
     --mysql数据库程序设计笔记:第三章:查询1、单表查询:1)、简单查询查所有列:格式:select*from表名;举例:mysql>select*fromtb_student;+----+-----------+-------------+------+------------+----------+--------+---------+-------------------+|id|studentNo|s......
  • Go语言入门(go环境配置,变量和常量)
    go语言特点天然支持高并发语法简单,去掉很多臃肿的东西优化的内存分配和垃圾处理完善的标准库go安装下载:Go下载-Go语言中文网-Golang中文社区(studygolang.com)goversion判断是否安装成功配置环境变量GOROOT,GOPATHgoenv查看环境变量配置goland开发工具安装Dow......