从入门到精通:探索Flask框架的无限可能

作者:大连淘贝游戏开发公司 阅读:78 次 发布时间:2023-07-09 05:31:31

摘要:从入门到精通:探索Flask框架的无限可能作为一名Python开发者,相信大家都会经常使用到Web框架。其中,Flask作为一个轻量级的Python Web框架,拥有着简单、灵活、容易上手的特点,因此在业内备受青睐。Flask不但能够满足Web开发的常规需求,还具备了一些独特的特性,可以让开...

从入门到精通:探索Flask框架的无限可能

从入门到精通:探索Flask框架的无限可能

作为一名Python开发者,相信大家都会经常使用到Web框架。其中,Flask作为一个轻量级的Python Web框架,拥有着简单、灵活、容易上手的特点,因此在业内备受青睐。Flask不但能够满足Web开发的常规需求,还具备了一些独特的特性,可以让开发者在实践中更加便捷、灵活地进行开发。

本文将从Flask的基本使用、蓝图、扩展等方面为大家详细介绍这个优秀的Web框架。

一、Flask的基本使用

Flask拥有极少的依赖关系,可快速、方便地建立一个Web应用。通过读入视图函数,应用中的路由和其它处理器被定义。视图函数是Python代码,它们被称为视图因为它们处理URI以及HTTP请求中不同的方法。

接下来我们将从一个简单的“Hello World”开始,大家先需要安装Flask:

```

pip install Flask

```

完成安装后,可以创建一个名为Hello World的app:

```

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello_world():

return 'Hello World!'

if __name__ == '__main__':

app.run()

```

代码解析:

- 第1行:导入Flask类库,这个类库是Flask框架中最核心最基本的类。

- 第3行:创建一个Flask的实例化对象,app就是实例化后得到的对象。

- 第5-8行:定义了一个叫做hello_world()的视图函数,当用户访问URL根('/')的时候,就会调用这个函数并返回'slugdb'。

- 第10行:如果当前文件被当做Python脚本运行,则开始运行Flask应用并监听从客户端发向Web服务器的请求。

- 如果直接通过命令行去执行当前文件,则 __name__的值为"__main__",会将app提供的Web服务在本地进行运行。

运行上述代码,控制台输出以下结果:

```

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

```

这就告诉我们,应用程序在本地主机和端口5000上运行。接下来,在浏览器中打开http://127.0.0.1:5000,我们就可以看到输出:

```

Hello World!

```

二、使用蓝图

在应用程序非常大时,蓝图允许开发人员归类并组织视图,模板和静态文件。在Flask中,使用蓝图将一个应用程序分成若干个模块,还可以将一个应用程序中相同业务逻辑的视图函数分成同类,在个人、小型项目开发时并不常用。

现在,我们来根据不同的URL请求路径将应用程序拆分成两个不同的蓝图:

```

from flask import Blueprint, render_template

app = Flask(__name__)

blueprint1 = Blueprint('firstpage', __name__, url_prefix='/firstpage')

blueprint2 = Blueprint('secondpage', __name__, url_prefix='/secondpage')

@app.route('/')

def index():

return 'Index!'

@app.route('/hello')

def hello():

return 'Hello World'

@blueprint1.route('/')

def first_page():

return 'First Page!'

@blueprint1.route('/hello')

def hello_first():

return 'Hello First Page'

@blueprint2.route('/')

def second_page():

return 'Second Page!'

@blueprint2.route('/hello')

def hello_second():

return 'Hello Second Page'

app.register_blueprint(blueprint1)

app.register_blueprint(blueprint2)

if __name__ == '__main__':

app.run(debug=True,port=5000)

```

代码解析:

- 第6-7行:通过Blueprint类创建两个蓝图,url_prefix参数被设置为'/firstpage'和'/secondpage',这意味着这两个蓝图内的所有路由将会默认加上前缀/firstpage和/secondpage。

- 第13-15行:定义视图函数index(),当访问/路径时,跳转到首页。

- 第17-19行:定义视图函数hello(),当访问/hello路径时,返回“Hello World”。

- 第21-23行:将名为'firstpage'的蓝图和视图函数first_page()绑定,当访问/路径时,返回“First Page!”。

- 第25-27行:将名为'firstpage'的蓝图和视图函数hello_first()绑定,当访问/hello路径时,返回“Hello First Page!”。

- 第29-31行:将名为'secondpage'的蓝图和视图函数second_page()绑定,当访问/路径时,返回“Second Page!”。

- 第33-35行:将名为'secondpage'的蓝图和视图函数hello_second()绑定,当访问/hello路径时,返回“Hello Second Page!”。

- 第37-38行:将蓝图注册到主应用的app实例中

- 第40-44行:调用run()方法运行app,实现Web服务器的监听。

通过以上示例,我们成功的将应用程序拆分成了两个蓝图。这使得代码更加清晰易懂,访问路由路径更加直观。在开发较为庞大的应用时,经常需要将应用程序进行模块拆解并创建不同的蓝图,这可以让程序的维护更加容易。

三、使用Flask扩展

接下来我们将介绍一些Flask中最常用的扩展。Flask扩展计划用于增强Flask框架的功能,并使我们更方便地编写Web应用程序。通过这些扩展程序,我们可以轻松地处理表单验证、文件上传等常见问题。

1. Flask-WTF(表单处理扩展)

Flask-WTF是一个Python Flask的第三方库,它简化了HTML表单的处理和验证。Flask-WTF使用WTForms作为表单验证的基础,这使得它变得非常强大。

下面我们来看一下使用Flask-WTF进行表单处理的示例:

```

from flask import Flask, render_template

from flask_wtf import FlaskForm

from wtforms import StringField, SubmitField

from wtforms.validators import DataRequired

app = Flask(__name__)

app.config['SECRET_KEY'] = '123456'

class NameForm(FlaskForm):

name = StringField('Name', validators=[DataRequired()])

submit = SubmitField('Submit')

@app.route('/', methods=['GET','POST'])

def index():

name = None

myform = NameForm()

if myform.validate_on_submit():

name = myform.name.data

myform.name.data = ''

return render_template('index.html', form=myform, name=name)

if __name__ == '__main__':

app.run(debug=True,port=5000)

```

代码解析:

- 第5-6行:导入Flask、render_template类库和FlaskForm类库。

- 第7-9行:导入StringField、SubmitField和DataRequired类库。

- 第11行:创建Flask的实例化对象,app就是实例化后得到的对象。

- 第12行:配置密钥密令,此步骤很重要。

- 第14-19行:创建表单,包括一个name字段和一个submit字段,数据验证器为DataRequired()。

- 第21-31行:定义上下文处理器,将表单对象传入模板,使之可以直接在模板中调用。

- 第33-37行:路由函数处理GET/POST请求,验证表单是否合法。

- 第38-41行:使用render_template渲染模板(index.html),将myform对象和name参数传入模板中。

- 第43-48行:启动应用程序。

在上面的示例中,展现了使用Flask-WTF处理表单的一个实例。我们使用FlaskForm类及其子类来创建表单,并使用WTForms来处理表单数据验证。这可以在很大程度上简化表单处理的代码,并节约开发时间。

2. Flask-Login(用户登录处理扩展)

Flask-Login是一个非常流行的用户管理扩展,它集成了用户的注册、登录和登出以及其他用户相关的处理。使用它,开发者可以轻松地集成和管理用户的登录和身份验证。

下面我们来看一下使用Flask-Login进行用户身份验证的示例:

```

from flask import Flask, render_template, redirect, url_for, flash

from flask_login import LoginManager, login_required, login_user, logout_user, UserMixin

app = Flask(__name__)

app.secret_key = '123456'

login_manager = LoginManager(app)

login_manager.login_view = 'login'

login_manager.login_message_category = 'info'

class User(UserMixin):

def __init__(self,id,name):

self.id = id

self.name=name

users = [

User(1,'admin'),

User(2,'jack'),

User(3,'xiaoming')

]

@login_manager.user_loader

def load_user(user_id):

for user in users:

if user.id == int(user_id):

return user

return None

@app.route('/login', methods=['GET', 'POST'])

def login():

if request.method == 'POST':

id = request.form['id']

pw = request.form['password']

for user in users:

if user.id==id:

if pw==user.name:

login_user(user)

flash('Logged in successfully.')

return redirect(url_for('protected'))

break

return redirect(url_for('login'))

else:

return render_template("login.html")

@app.route('/logout')

@login_required

def logout():

logout_user()

return 'Logout'

@app.route('/')

@login_required

def protected():

return 'You are logged in as : ' + current_user.name

if __name__ == '__main__':

app.run(debug=True,port=5000)

```

代码解析:

- 第5-8行:导入Flask类库、render_template类库、redirect函数、url_for函数、flash函数、LoginManager类库、login_required函数、login_user函数、logout_user函数、UserMixin类。

- 第10行:创建Flask的实例化对象,app就是实例化后得到的对象。

- 第11行:设置密钥密令,对于Flask-Login实现身份验证非常重要。

- 第13行:在app对象中实例化LoginManager类,然后配置它的各项属性。

- 第15-38行:定义User和user_loader函数以及login路由。

- 第41-44行:处理logout路由请求。

- 第47-50行:处理登陆后访问/personal路径的请求。

- 第53-58行:启动应用。

在上述代码中,我们使用Flask-Login实现用户身份验证。使用Flask-Login,开发者只需要定义一个User类继承自UserMixin即可。之后,用户的身份验证等操作都可以基于User类进行。Flask-Login中提供了login_user()、logout_user()、login_required()等函数来实现用户登录和登出等功能。

综上所述,Flask除了基本的Web框架功能外,这些扩展为我们提供了更多的功能特性,使得应用开发变得更加简单和高效。

总结

Flask是Python中最受欢迎的Web应用程序框架之一,它的特点是轻量、灵活和容易上手。通过本文的介绍,尽管我们看到的是一个简单的应用,但也展示了Web框架的基本功能,并深入讲解了蓝图和两个重要的扩展:Flask-WTF和Flask-Login。通过学习Flask,我们可以使用Python实现更多的Web应用程序的需求,也可以不断发现它的更多特性。最后,我相信大家都能够像我一样,喜欢上Flask。

  • 原标题:从入门到精通:探索Flask框架的无限可能

  • 本文链接:https://qipaikaifa1.com/tb/15611.html

  • 本文由大连淘贝游戏开发公司小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与淘贝科技联系删除。
  • 微信二维码

    CTAPP999

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:189-2934-0276


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部