草庐IT

【Web开发】Python实现Web服务器(Flask测试后台框架模板)

爱看书的小沐 2023-03-28 原文

1、前言

提示:Flask是一个用python语言基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向需求简单,项目周期短的小应用。

Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。

  • 一个最小的 Flask 应用如下:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'

2、Flask测试网页(后台框架模板)

2.1 基于layui的后台框架模板的网页

layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈,从源代码到使用方法的每一处细节都经过精心雕琢,非常适合网页界面的快速开发。layui 区别于那些基于 MVVM 底层的前端框架,却并非逆道而行,而是信奉返璞归真之道。准确地说,它更多是面向后端开发者,你无需涉足前端各种工具,只需面对浏览器本身,让一切你所需要的元素与交互,从这里信手拈来。

  • test_layui.py:
#*************************************************************** # Purpose: 基于layui的后台框架模板的网页(Flask的web服务器) # Author: 爱看书的小沐 # Date: 2022-5-24 # Languages: python # Platform: python 3.9 win64 # OS: Win10 win64 # ************************************************************** from flask import Flask, Response from flask import render_template, make_response, jsonify, send_from_directory from io import FileIO import os app = Flask(__name__) #app = Flask(__name__, template_folder="templates") app.jinja_env.block_start_string = '{%%' # 修改块开始符号 app.jinja_env.block_end_string = '%%}' # 修改块结束符号 app.jinja_env.variable_start_string = '{{{' # 修改变量开始符号 app.jinja_env.variable_end_string = '}}}' # 修改变量结束符号 app.jinja_env.comment_start_string = '##}' # 修改注释开始符号 app.jinja_env.comment_end_string = '##}' # 修改注释结束符号复制代码 # 因为vue和render_template的模板都是用{{ }},所以会冲突,将flask的修改为[[ ]] ##app.jinja_env.variable_start_string = '[[' ##app.jinja_env.variable_end_string = ']]' @app.route('/') def index(): return render_template('layui-v2.6.9/examples/table.html') @app.route("/dist/css/<path:path>") @app.route("/src/css/<path:path>") def get_css2(path): data = FileIO("templates/layui-v2.6.9/src/css/{}".format(path)) resp = Response(data, mimetype="text/css") return resp @app.route("/dist/<path:path>") @app.route("/src/<path:path>") def get_json(path): data = FileIO("templates/layui-v2.6.9/src/{}".format(path)) resp = Response(data, mimetype="application/javascript") return resp @app.route("/json/<path:path>") def get_binary(path): data = FileIO("templates/layui-v2.6.9/examples/json/{}".format(path)) resp = Response(data, mimetype="application/json") return resp @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico' , mimetype='image/vnd.microsoft.icon') #<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}"> if __name__ == '__main__': app.run(debug = True)
  • 运行结果:

2.2 基于layuimini的后台框架模板的网页

layuimini,后台admin前端模板,基于 layui 编写的最简洁、易用的后台框架模板。只需提供一个接口就直接初始化整个框架,无需复杂操作。

界面足够简洁清爽,响应式且适配手机端。

  • 一个接口几行代码而已直接初始化整个框架,无需复杂操作。

  • 页面支持多配色方案,可自行选择喜欢的配色。

  • 支持多tab,可以打开多窗口。

  • 支持无限级菜单和对font-awesome图标库的完美支持。

  • 失效以及报错菜单无法直接打开,并给出弹出层提示完美的线上用户体验。

  • url地址hash定位,可以清楚看到当前tab的地址信息。

  • 刷新页面会保留当前的窗口,并且会定位当前窗口对应左侧菜单栏。

  • 支持font-awesome图标选择插件.

  • test_layuimini.py:

#*************************************************************** # Purpose: 基于layuimini的后台框架模板的网页(Flask的web服务器) # Author: 爱看书的小沐 # Date: 2022-5-30 # Languages: python # Platform: python 3.9 win64 # OS: Win10 win64 # ************************************************************** from flask import Flask, Response from flask import render_template, make_response, jsonify, send_from_directory from io import FileIO import os import mimetypes app = Flask(__name__) app.jinja_env.block_start_string = '{%%' # 修改块开始符号 app.jinja_env.block_end_string = '%%}' # 修改块结束符号 app.jinja_env.variable_start_string = '{{{' # 修改变量开始符号 app.jinja_env.variable_end_string = '}}}' # 修改变量结束符号 app.jinja_env.comment_start_string = '##}' # 修改注释开始符号 app.jinja_env.comment_end_string = '##}' # 修改注释结束符号复制代码 @app.route('/') def index(): return render_template('layuimini-2/index.html') @app.route("/<path:path>") def get_staticfile(path): directory = os.getcwd() + "/templates/layuimini-2/" print(directory) response = make_response(send_from_directory(directory, path.encode('utf-8').decode('utf-8'), as_attachment=False)) mime_type = mimetypes.guess_type(path)[0] if path.endswith(".js") : mime_type = "application/javascript" response.headers['Content-Type'] = mime_type print(directory, path, mime_type) return response @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico' , mimetype='image/vnd.microsoft.icon') #<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}"> if __name__ == '__main__': app.run(debug = True)
  • 运行结果:

2.3 基于Pear Admin Layui的后台框架模板的网页

Pear Admin 是一款开箱即用的前端开发模板,扩展Layui原生UI样式,整合第三方开源组件,提供便捷快速的开发方式,延续LayuiAdmin的设计风格,持续完善的样式与组件的维护,基于异步Ajax的菜单构建,相对完善的多标签页,单标签页的共存.

  • test_layuimini.py:
#*************************************************************** # Purpose: 基于Pear Admin Layui的后台框架模板的网页(Flask的web服务器) # Author: 爱看书的小沐 # Date: 2022-5-30 # Languages: python # Platform: python 3.9 win64 # OS: Win10 win64 # ************************************************************** from flask import Flask, Response from flask import render_template, make_response, jsonify, send_from_directory from io import FileIO import os import mimetypes app = Flask(__name__) app.jinja_env.block_start_string = '{%%' # 修改块开始符号 app.jinja_env.block_end_string = '%%}' # 修改块结束符号 app.jinja_env.variable_start_string = '{{{' # 修改变量开始符号 app.jinja_env.variable_end_string = '}}}' # 修改变量结束符号 app.jinja_env.comment_start_string = '##}' # 修改注释开始符号 app.jinja_env.comment_end_string = '##}' # 修改注释结束符号复制代码 @app.route('/') def index(): return render_template('Pear-Admin-Layui-main/index.html') @app.route("/<path:path>") def get_staticfile(path): directory = os.getcwd() + "/templates/Pear-Admin-Layui-main/" print(directory) response = make_response(send_from_directory(directory, path.encode('utf-8').decode('utf-8'), as_attachment=False)) mime_type = mimetypes.guess_type(path)[0] if path.endswith(".js") : mime_type = "application/javascript" response.headers['Content-Type'] = mime_type print(directory, path, mime_type) return response @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico' , mimetype='image/vnd.microsoft.icon') #<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}"> if __name__ == '__main__': app.run(debug = True)
  • 运行结果:

3、Flask测试网页(其他)

3.1 基于vue的考试题目列表的网页

  • test_vue.py:
#*************************************************************** # Purpose: 基于vue的考试题目列表的网页(Flask的web服务器) # Author: 爱看书的小沐 # Date: 2022-5-30 # Languages: python # Platform: python 3.9 win64 # OS: Win10 win64 # ************************************************************** import sqlite3,os from flask import Flask from flask import jsonify,render_template,send_from_directory from flask_cors import CORS app = Flask(__name__) # CORS(app, supports_credentials=True) #解决跨域问题 cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) #两种模式都行 @app.route('/') def home(): return render_template('test_vue.html',title='flask + vue example') @app.route('/api/questions') def get_questions(): db_path = os.getcwd() + "/static/exam.db" conn = sqlite3.connect( db_path ) conn.row_factory = sqlite3.Row cur = conn.cursor() # sql = 'select * from questions' sql = 'SELECT * from questions ORDER BY RANDOM () LIMIT 100' rows = cur.execute(sql).fetchall() rows = [dict(row) for row in rows] return jsonify(rows) @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico' , mimetype='image/vnd.microsoft.icon') if __name__ == "__main__": app.run(debug=True, port=5000)
  • 运行结果:
<font color=blue size=5> 亲,相关功能正在建设中,请稍等。。。

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭ 如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡) 感谢各位童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

有关【Web开发】Python实现Web服务器(Flask测试后台框架模板)的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  5. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  6. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  7. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  8. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  9. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  10. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

随机推荐