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(/)  // 默认有GET
# @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 %} // 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,就像这个样子,内容隐含在方框里,输入的时候就会消失,只体现一个提示作用,如下图的身份证号和姓名:
在这里插入图片描述
    有个事情明确一下,在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

猜你喜欢

转载自blog.csdn.net/gls_nuaa/article/details/118033044