web开发——Flask框架

其实我也不是很懂这个东西,但这次做的过程中有了一个简单的了解。还是写一篇总结一下吧!
Flask框架可以做什么?/为什么要用Flask框架?
Flask本身是一个轻量级的web开发框架,在web开发中难免需要进行服务器和用户之间的交互。Flask框架可以使我们只专注于功能逻辑的实现,隐藏掉服务器和用户的交互过程(flask帮你去完成)。之所以称Flask是一个轻量级的原因是Flask中只有两个模块:werkzeug(路由模块)、jinja2(模板模块)。虽然轻量但却功能强大,可以理解为Flask只是一个内核,可以增加各种扩展包来增加功能。

Flask最基本的框架代码是这样的(在python的情况下,其余的我也不会~):

1.导入flask相关扩展
from flask import Flask等

2.创建flask应用实例,传入_name_,以确定资源路径
app = Flask(__name__)

3.定义路由及视图函数
@app.route('/')
@app.route('/', method=['GET','POST'])增加请求,如果有按键的话要加上
def index():
    return "目标页面(.html)"
    # 如果要传参数,要用return render_template("目标页面(.html)", 传递参数变量)

#4.启动程序
If __name__ == '__main__':
    app.run()

下面介绍一些我经常用的一些flask语法:

1.路由路径问题(也就是@app.route(‘路径’))

明白这个问题,瞬间就知道flask是如何工作的了!如果在主机上运行的话,默认路由就是127.0.0.1(也就是默认路由:/)后面可以自己设置路径。当我们在html中利用链接进行跳转时,如果跳转的路径和flask中指定的路径相同就会进入对应视图函数。举个例子:在html中设置一个按键作为链接,链接的目标路径是/hello。当按键按下的时候,主函数中@app.route(‘/hello’)就会收到消息,接下来就该执行属于该路径下的视图函数了~

2.跳转界面问题

前面说了路由问题,那如何在对应路由下导入指定的html文件呢?这就是retuen的作用。在视图函数的最后,加上return某个HTML文件,那么这些逻辑操作就会基于这个HTML文件来完成

3.按键问题

界面设计中按键经常用到。Flask中对于按键动作的读取是通过方法(method)POST检测的,进入页面的时候已经默认了方法(method)GET。因为不是默认,所以必须要指定,使用模板如下:

@app.route('/', methods = ['GET','POST'])
def index():
    if (request.method == 'POST'):
        do_something
        # return "xxx" 如果涉及两个HTML的话这里可以加一个
    return "xxx"

4.变量传递

这个变量传递指的是主函数和HTML文件之间的值传递,传递的方式是通过return来实现(底层是通过jinja2)。在需要有参数传递(可多个参数)的时候就不能简单的return网页文件了。需要用下面这个:

return render_template("目标页面(.html)", 传递参数变量1,传递变量参数2)

有一个习惯就是两个变量的命名一致,就像下面这样传递参数hello。这里面的参数可以是任意结构(字符/类/整形等)

return render_template("目标页面(.html)", hello=hello)

在HTML中使用通过双中括号加变量名的形式:

    {{ hello }}

5.HTML中控制代码块(for/if)方法:

{% for xx in xx%}
    Do_something
{% endfor %}

{% if xx in xx%}
    Do_something
{% endif %}

6.一些简单的用户交互模块(FlaskFrom表单):

指的是输入、按键。因为一些界面的需求,这里的输入还分成字符输入和密码输入(不是明文显示,用小黑点儿代替)。直接上用法:

所有的都需要进行导入,介绍两个比较常用的:
StringField是普通字符输入 PasswordField是密码输入 SubmitField是按钮
from flask import Flask, url_for, redirect, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SelectField, SubmitField
from wtforms.validators import DataRequired, EqualTo
'''
 对于每次使用使用可以声明一个类,然后整个传递过去:
 u后面的就是要显示的文字,因为有的编码要求,validators=[DataRequired()]是判断是否符合输入的要求。
 render_kw就是为了placeholder的使用。
 根据需求特点选择对应种类就行了
'''
class LoginForm(FlaskForm):
    ID_Card = StringField(u'身份证号:', validators=[DataRequired()], render_kw={"placeholder": "身份证号"})
    name = StringField(u'姓名:', validators=[DataRequired()], render_kw={"placeholder": "姓名"})
    check = SubmitField(u'查询')
@app.route('/', methods = ['GET','POST'])
def index():
    login_form = LoginForm()
    if (request.method == 'POST'):
        if login_form.validate_on_submit(): #这句就是判断是否提交有效地
        if login_form.check.data: #这是第二种判断按钮被点击的方式,有时候用这个更好一点

另外小白可能疑惑啥是placehold,就像这个样子,内容隐含在方框里,输入的时候就会消失,只体现一个提示作用,如下图的身份证号和姓名:

web开发——Flask框架
有个事情明确一下,在html中都知道输入input,也有各种type。其实就是flask做一个封装,等真正在界面上显示的时候,变量会被重新解析成input的。同时如果有了StringField,必须要输入,否则就无法继续进行按钮操作(我也不知道为啥~)

flask还有一个flash的部分,可以用于提示,一刷新就没有了,在主函数中flash(‘内容’)即可。但在HTML中需要一段专用代码做显示:

        <!--对于flash的使用要用如下一个循环,它有缓冲区-->
        {% for message in get_flashed_messages() %}
            {#对于显示文字的样式可以用style来改变,style有color参数用于改变颜色#}
            <div class=flash style="color: rgb(255,0,0)")>{{ message }}</div>
        {% endfor %}

当然Flask的内容远不止如此,但我就不会了~

留一些资料,供Flask的学习:

视频学习资料:https://b23.tv/rd8SN3
window10安装flask:https://blog.csdn.net/fuyouzhiyi/article/details/105545210

Original: https://blog.csdn.net/gls_nuaa/article/details/118033044
Author: DWQY
Title: web开发——Flask框架

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/749360/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球