flask-day01

3 篇文章 0 订阅
2 篇文章 0 订阅

前段时间在学习Django,之后上周跟着老师做了一个项目,然后就没有怎么更新博客,这周在学习flask,然后就把本周的学习的内容大致总结一下。

1、什么是flask

Flask是基于Werkzeug,Jinja 2和良好意图的基于Python的微框架。

Django和flask都是基于Python的web框架
但是Django是一个集成的比较完善的一个web框架,你能想到的基本上Django都帮你封装好了,你想要进行私人订制的空间太小了,但是开发效率高。
flask是一个微框架,确实很‘轻’,也正是因为它很‘轻’,灵活性高你可根据自己的需要进行‘私人订制’。

2、创建flask项目和一些基本配置

在Windows下使用Pycharm创建flask项目
这里写图片描述
选图中的Flask,选择创建项目的路径,最重要的是你配置flask的项目环境,我们一般在创建项目前先为项目创建一个Python解释器的虚拟环境。这里配置环境就不多说了,前面专门讲了如何配置虚拟环境。只是在该环境需要安装Flask包

pip install Flask
使用Pycharm创建的flask项目自带了两个文件夹(static和templates)和一个py文件(和你创建的文件名一样)里面的初始代码:

from flask import Flask

app = Flask(__name__)


@app.route('/')         # 路由
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    # 启动项目
    # debug=True(启动调试模式,可以在网页看到自己的错误)
    # port='8000'(端口)
    # host= '0.0.0.0'Ip地址
    # app.run(debug=True, port='8000')
    app.run()

我们可以运行该py文件一个flask项目就运行起来,默认的端口号是5000,只要访问 http://127.0.0.1:5000/你就可以网页看到一个Hello World!,在run()中我们可配置debug,port和host等参数,如果在网页上调试不是一个好的idea,所以我们对项目进行改装成Django的运行模式通过Python manage.py runserver来启动项目。
1、创建自己的app文件夹
创建一个init.py和views.py文件
app/init.py

from flask import Flask

def create_app():

    app = Flask(__name__)
    return app

再把和app文件夹平级的启动.py文件改成manage.py
manage.py

from flask_script import Manager

from app import create_app

# 初始化,__name__代表主模块名或者包
blue = create_app()

manager = Manager(app=blue)

if __name__ == '__main__':

    manager.run()

通过上面的操作我们就可以通过Python manage.py runserver来启动我们的项目了,但是现在没有视图,现在我们需要配置自己的视图,在flask中我们通过flask中我们通过blueprint(蓝图)来管理url。
app/views.py

from flask import render_template, request, make_response, redirect

from flask import Blueprint, send_file, url_for, abort

# Blueprint通过把实现不同功能的module分开,从而把一个大的application分割成各自实现不同功能的module。
# 在一个Blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名。
blue = Blueprint('first', __name__)


# methods=['POST', 'GET']可以指定请求方式
@blue.route('/', methods=['POST', 'GET'])      # url 路由(127.0.0.1::5000)
def hello_world():   # 视图函数
    return 'Hello World!'

把创建好的blue在app/init.py进行初始化:

from flask import Flask

from app.views import blue


def create_app():

    app = Flask(__name__)
    # url_prefix='/app'蓝图前缀用来区分不同的app
    app.register_blueprint(blueprint=blue, url_prefix='/app')  # 初始化注册的蓝图
    return app

现在启动项目我们就可以 访问127.0.0.1:5000/可以看到Hello World!
我们在创建项目的时候项目自动帮我们创建了两个文件夹(static和templates),static主要放置一些js、css、image等静态文件的配置,templates主要是放置一些网页。
下面配置访问static和templates
app/init.py

import os

from flask import Flask

from app.views import blue


def create_app():
    # os.path.abspath(__file__):'D:\\envFlaskWorkSpace\\day1.1\\app\\views.py'
    # os.path.dirname(os.path.abspath(__file__)):'D:\\envFlaskWorkSpace\\day1.1\\app'
    # os.path.dirname(os.path.dirname(os.path.abspath(__file__))):'D:\\envFlaskWorkSpace\\day1.1'
    # 也就是BASE_DIR = 'D:\\envFlaskWorkSpace\\day1.1'
    # 再把templates和static加入到基础路径里
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    templates_dir = os.path.join(BASE_DIR, 'templates')
    static_dir = os.path.join(BASE_DIR, 'static')

    app = Flask(__name__, static_folder=static_dir, template_folder=templates_dir)
    # url_prefix='/app'蓝图前缀用来区分不同的app
    app.register_blueprint(blueprint=blue, url_prefix='/app')  # 初始化注册的蓝图
    return app

这样我们就完成static和templates路径的配置

3、路由

现代Web应用程序使用有意义的URL来帮助用户。如果页面使用他们可以记住并用于直接访问页面的有意义的URL,用户更可能喜欢页面并返回。

使用route()装饰器将一个函数绑定到一个URL。

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

Django的路由设计是采用集中处理的方法,利用正则匹配。

4、变量规则

您可以通过标记部分将可变部分添加到URL 。您的函数然后接收 作为关键字参数。或者,您可以使用转换器来指定参数的类型


@blue.route('/hello/<name>/')  # <name>是字符串类型
def hello_man(name):
    print(type(name))
    return 'hello name:%s' % name


@blue.route('/helloint/<int:id>/')    #<int:id> 指定id是整型
def hello_int(id):
    print(type(id))
    a = 'xlsb'
    return 'hello int:%s' % id


@blue.route('/getfloat/<float:price>/') #<float:price> 指定price是浮点型
def hello_float(price):

    return 'float:%s' % price


@blue.route('/getstring/<string:str>/') #<string:str> 指定str是字符串类型
def hello_string(str):

    return 'string:%s' % str


@blue.route('/getpath/<path:url_path>/')  # <path:url_path>
def hello_path(url_path):                 # 如果请求的url是:127.0.0.1:8070/getpath/fhdjhf/df/sdf/
                                          # 后面的url_path:fhdjhf/df/sdf/把'/'也看成字符串
    return 'path:%s' % url_path


@blue.route('/getuuid/')
def hello_uuid():
    a = uuid.uuid4()
    return str(a)


@blue.route('/getbyuuid/<uuid:uu>/')
def hello_by_uuid(uu):

    return 'uuid:%s' % uu

转换器类型:
类型 | 描述
string | (默认)接受不带斜杠的文本
int | 接受正整数
float | 接受正浮点值
path | 喜欢,string但也接受斜线
uuid | 接受UUID字符串

5、请求(request)

我们可以通过route()函数添加关键字参数methods=[‘GET’, ‘POST’]来配置请求方式
我们可以通过request.args来获取GET请求的参数,可以通过request.form来获取表单提交的参数。

from flask import render_template, request, make_response, redirect
from flask import Blueprint, url_for, abort
# 请求
@blue.route('/getrequest/', methods=['GET', 'POST'])
def get_request():
    args = request.args   # 获取GET请求后传的参数
    form = request.form   # 获取POST请求的参数
    return '获取request'

我们在获取表单传来的数据的话使用request.form[‘key’]和request.form.get(‘key’, None),建议使用get方法表单参数,KeyError的话如果用前面的一种方法可能就会报错,如果用get方法可以给一个默认的参数,这样用户在提交空表单时不至于程序崩溃。

6、响应

我们通过make_response()函数来获取响应对象

# 响应
@blue.route(('/makeresponse/'))
def make_responses():
    response = make_response('<h2>into the new world</h2>')
    return response

7、错误

@blue.route('/makeabort/')
def make_abort():
    abort(404)
    return '终结'


@blue.errorhandler(404)
def get_error(exception):

    return '捕捉异常:%s' % exception

这是一个毫无意义的例子
默认情况下,显示每个错误代码的黑白错误页面。如果你想定制错误页面,你可以使用 errorhandler()装饰器:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Flask-APScheduler在MongoDB中实现定时任务,只需要在Flask应用中定义一个定时任务,并将其配置为在MongoDB中运行。具体代码如下:from flask_apscheduler import APSchedulerscheduler = APScheduler()# Configure the scheduler to use MongoDB as its job store scheduler.add_jobstore('mongodb', host='localhost', database='your_database_name')@scheduler.task('interval', id='do_job_1', seconds=30) def job_1(): print("Job 1 executed")@scheduler.task('cron', id='do_job_2', day_of_week='mon-sun', hour='12', minute='30') def job_2(): print("Job 2 executed")# Start the scheduler scheduler.start() ### 回答2: 要使用Flask-APScheduler实现数据库MongoDB定时任务,首先需要安装Flask-APScheduler和pymongo库。在Flask应用程序中,可以使用以下代码实现: 1. 首先,在app.py文件中导入所需的模块和库: ```python from flask import Flask from flask_apscheduler import APScheduler from pymongo import MongoClient ``` 2. 创建Flask应用程序实例: ```python app = Flask(__name__) ``` 3. 配置MongoDB连接并创建MongoDB客户端: ```python app.config['MONGO_URI'] = 'mongodb://localhost:27017/db_name' mongo_client = MongoClient(app.config['MONGO_URI']) ``` 请注意,`db_name`应替换为你的实际数据库名称,`localhost:27017`应替换为你的MongoDB服务器地址和端口。 4. 初始化APScheduler实例并配置任务存储: ```python scheduler = APScheduler() scheduler.init_app(app) scheduler.start() ``` 5. 创建一个定时任务函数,该函数将执行需要定时执行的操作。这里以向MongoDB数据库中插入一条记录为例: ```python def insert_data(): db = mongo_client.db_name collection = db.collection_name data = {'name': 'John', 'age': 30} collection.insert_one(data) ``` 请注意,`db_name`和`collection_name`应替换为你的实际数据库和集合名称。 6. 创建一个定时任务,并将其添加到APScheduler中: ```python scheduler.add_job(func=insert_data, trigger='interval', seconds=60) ``` 这将每隔60秒执行一次`insert_data`函数。 7. 最后,在Flask应用程序的入口处,启动Flask应用程序: ```python if __name__ == '__main__': app.run() ``` 以上代码片段演示了如何使用Flask-APScheduler和pymongo库实现数据库MongoDB定时任务的基本步骤。根据实际需求,你可以根据需要调整设置和任务函数。 ### 回答3: 要使用Flask-APScheduler实现MongoDB数据库的定时任务,需要先安装Flask和Flask-APScheduler库,并且确保MongoDB数据库已经正确安装和配置。 首先,在Flask应用中导入所需要的库和模块: ```python from flask import Flask from flask_apscheduler import APScheduler from pymongo import MongoClient ``` 然后,创建Flask应用和APScheduler实例并配置MongoDB数据库的连接: ```python app = Flask(__name__) scheduler = APScheduler() scheduler.init_app(app) # 配置MongoDB数据库连接 client = MongoClient('mongodb://localhost:27017/') # 替换为实际的MongoDB连接地址 db = client['mydatabase'] # 替换为实际的数据库名称 ``` 接下来,创建一个定时任务函数,该函数在特定时间间隔内会被调度执行,并且可以在函数中访问MongoDB数据库: ```python @scheduler.task('interval', id='my_job', minutes=30) def my_task(): collection = db['mycollection'] # 替换为实际的集合名称 # 在此处添加需要执行的MongoDB操作,例如插入、更新、删除等 # 例如:collection.insert_one({"name": "example"}) ``` 最后,启动定时任务调度器和Flask应用: ```python @app.route('/') def index(): return 'Flask-APScheduler MongoDB Demo' if __name__ == '__main__': scheduler.start() app.run() ``` 启动应用后,定时任务会按照预定的时间间隔执行,并且可以在`my_task()`函数中进行MongoDB的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值