当前位置:网站首页>flask 面试题 问题
flask 面试题 问题
2022-08-03 05:10:00 【중둑【上瘾】】
1,什么是Flask,有什么优点?
概念解释
Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序。这个Web应用程序可以是一些Web页面,博客,wiki,基于Web的日里应用或商业网站。
优点
Flask属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖外部库的框架。
- 框架很轻量
- 更新时依赖小
- 专注于安全方面的bug
Flask的依赖
Werkzeug 一个WSGI工具包(web服务网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的借口,其他语言也有类似的接口)
jinja2模板引擎
2,Django和Flask有什么区别?
Flask
轻量级web框架,默认依赖两个外部库:jinja2和Werkzeug WSGI工具
适用于做小型网站以及web服务的API,开发大型网站无压力,但架构需要自己设计
与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django
Django
重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择上花费大量时间。
自带ORM(Object-Relational Mapping 对象关系映射)和模板引擎,支持jinja等非官方模板引擎。
自带ORM使Django和关系型数据库耦合度高,如果要使用非关系型数据库,需要使用第三方库
自带数据库管理app
成熟,稳定,开发效率高,相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发。
python web框架的先驱,第三方库丰富
3,Flask-WTF是什么,有什么特点?
- Flask-wtf是一个用于表单处理,校验并提供csrf验证的功能的扩展库
- Flask-wtf能把正表单免受CSRF<跨站请求伪造>的攻击
eg:
form.html
<form action="{
{ url_for('wtf_form') }}" method='post'>
{
{ form.csrf_token }} #进入csrf验证
<p>{
{ form.username.label }}{
{ form.username(style='color:red',placeholder='请输入用户名') }}{
{ form.username.errors }}</p>
<p>{
{ form.userpass.label }}{
{ form.userpass() }}{
{ form.userpass.errors }}</p>
<p>{
{ form.submit() }}</p>
</form>manage.py
from flask import Flask,render_template,request
from flask_wtf import FlaskForm #导入继承父类
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import Length,DataRequired
class Login(FlaskForm): #继承自FlaskForm类
username = StringField('用户名',validators=[Length(min=6,max=12,message='用户名长度为6~12位'),DataRequired(message='用户名不能为空')])
userpass = PasswordField('密码',validators=[Length(min=6,max=12,message='密码长度为6~12位'),DataRequired(message='密码不能为空')])
submit = SubmitField('登录')
@app.route('/wtf_form',methods=['GET','POST'])
def wtf_form():
form = Login() #实例化form对象
if request.method == 'POST':
if form.validate_on_submit(): #数据正确 并且验证csrf通过
print(request.form.get('userpass'))
print(request.form.get('username'))
return '数据提交成功'
return render_template('wtf_form.html',form=form)
#注:
#1 methods 参数告诉Flask在URL映射中把这个视图函数注册为GET和POST请求的处理程序,默认GET
#2 采用post请求可以通过对象很轻松访问,GET 请求没有主体,提交的数据以查询字符串的形式附加到URL中
#3 validate_on_submit() 会调用username 字段上附属的 DataRequired() 验证函数。4,Flask脚本的常用方式是什么?
在shell中运行脚本文件
在python编译器中run
5,如何在Flask中访问会话?
会话(seesion)会话数据存储在服务器上。 会话是客户端登录到服务器并注销的时间间隔。 需要在此会话中进行的数据存储在服务器上的临时目录中。
from flask import session导入会话对象
session['name'] = 'admin'给会话添加变量
session.pop('username', None)删除会话的变量
6,Flask是一个MVC模型吗?如果是,可以示例一下吗?
flask是一个典型的MVC框架
MVC框架,图形理解
flask项目中的MVC理解
7, 解释Python Flask中的数据库连接?
python中的数据库连接有两种方式
在脚本中以用第三方库正常连接,用sql语句正常操作数据库,如mysql关系型数据库的pymsql库
用ORM来进行数据库连接,flask中典型的flask_sqlalchemy,已面向对象的方式进行数据库的连接与操作
8,谈谈restful?
9. 列举Http请求中常见的请求方式?
GET / POST/DELETE
10. 列举Http请求中的状态码?
404 请求的url地址不存在
503 访问限制有权限
200 访问成功
302 重定向
11. 列举Http请求中常见的请求头?
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
Cookie:这是最重要的请求头信息之一
Content-Type:请求类型
12. 什么是wsgi?
WSGI(Web Server Gateway Interface,Web 服务器网关接口)则是Python语言中1所定义的Web服务器和Web应用程序之间或框架之间的通用接口标准。
WSGI就是一座桥梁,桥梁的一端称为服务端或网关端,另一端称为应用端或者框架端,WSGI的作用就是在协议之间进行转化。WSGI将Web组件分成了三类:Web 服务器(WSGI Server)、Web中间件(WSGI Middleware)与Web应用程序(WSGI Application)。
Web Server接收HTTP请求,封装一系列环境变量,按照WSGI接口标准调用注册的WSGI Application,最后将响应返回给客户端。
13. Flask框架依赖组件?
Route(路由)
templates(模板)
Models(orm模型)
blueprint(蓝图)
Jinja2模板引擎
14. Flask蓝图的作用?
蓝图Blueprint实现模块化的应用
- book_bp = Blueprint('book', __name__)创建蓝图对象
- 蓝图中使用路由@book_bp.route('url')
- 在另一.py文件里导入和注册蓝图from book import book_bp app.register_blueprint(book_bp)
作用
将不同的功能模块化
构建大型应用
优化项目结构
增强可读性,易于维护(跟Django的view功能相似)
15. 列举使用过的Flask第三方组件?
flask_bootstrap
flask-WTF
flask_sqlalchemy
16. 简述Flask上下文管理流程?
每次有请求过来的时候,flask 会先创建当前线程或者进程需要处理的两个重要上下文对象,把它们保存到隔离的栈里面,这样视图函数进行处理的时候就能直接从栈上获取这些信息。
17. Flask中多app应用是怎么完成?
请求进来时,可以根据URL的不同,交给不同的APP处理
18. wtforms组件的作用?
WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。
19. Flask框架默认session处理机制?
Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了。
过期时间是通过cookie的过期时间实现的。
为了防止cookie内容被篡改,session会自动打上一个叫session的hash串,这个串是经过session内容、SECRET_KEY计算出来的,看得出,这种设计虽然不能保证session里的内容不泄露,但至少防止了不被篡改
20. ORM的实现原理?
概念: 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
详细介绍: 让我们从O/R开始。字母O起源于”对象”(Object),而R则来自于”关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
边栏推荐
猜你喜欢

2022/08/02 Study Notes (day22) Multithreading

Ali cloud object storage oss private barrels to generate links

Build your own web page on raspberry pie (1)

13.
lt.647. Palindromic substring + lt.516. Longest palindrome subsequence 
VSO Downloader Ultimate 5.0.1.45 中文多语免费版 在线视频下载工具

Install PostgreSQL on Windows

Alienware上线首个数字时装AR试穿体验

Installation of Apache DolphinScheduler version 2.0.5 distributed cluster

Kaggle(四)Scikit-learn

idea uses @Autowired annotation to explain the reasons and solutions
随机推荐
JS学习笔记(三)
UV decomposition of biotin - PEG2 - azide | CAS: 1192802-98-4 biotin connectors
Talking about GIS Data (6) - Projected Coordinate System
js garbage collection mechanism
Technology Sharing | How to do assertion verification for xml format in interface automation testing?
网络流媒体下载的 10 种方法(以下载 Echo 音乐为例)
idea uses @Autowired annotation to explain the reasons and solutions
第三次HarmonyOS培训
typescript43-类型兼容性说明
Junit
js实现一个 bind 函数
ss-2.子项目互相访问(order80 -> payment8001)
Js学习笔记(四)
Two ways to simulate multi-user login in Jmeter
Secondary development of WinForm controls
【HMS core】【Ads Kit】Huawei Advertising——Overseas applications are tested in China. Official advertisements cannot be displayed
JDBC与连接池
Interface testing framework of actual combat (2) | interface request assertion
typescript39-class类的可见修饰符
[Fine talk] Using native js to implement todolist