初识Flask
时间:2019-08-25
本文章向大家介绍初识Flask,主要包括初识Flask使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
Flask -day01
特点
- 短小精悍,可扩展性强的一个web框架。
- 区别其他任何的框架做了一个上下文管理机制
wsgi
web服务网关接口,是一套协议,实现协议的模块是
依赖wsgi: werkzurg
Flask安装
pip3 install flask
使用示例
示例一:
from werkzeug.wrappers import Request,Response
@Request.application
def hello(request): # 注意一定要写一个request
return Response('hello world')
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 4000, hello)
示例二:
from werkzeug.wrappers import Request,Response
from werkzeug.serving import run_simple
def run(environ,start_response):
return [b"hello world"] # 其实和1没有区别
if __name__ == '__main__':
run_simple('localhost', 4000, run)
学习flask
# 引入flask,flask是一个类
from flask import Flask
# 实例化一个类
# app = Flask('afdsfad') # 可以传入任何一个字符串,只是给对象起一个名字
# print(app)
app = Flask(__name__) # 这样子写了以后当被导入的时候就是name,当前就是main
@app.route('/index') # 路由与视图函数对应
def index(): # 没有参数
return 'Hello World'
# # 启动flask run就会直接夯住请求了
# app.run()
# 直接基于上面的方式书写的话,在被导入的时候也会执行,但是作为主函数不应该被执行,所以
if __name__ == '__main__':
app.run()
通过登录功能学习flask
视图函数
from flask import Flask, render_template, request,redirect
# app = Flask(__name__,template_folder=) # 默认是templates
app = Flask(__name__)
@app.route('/login',methods=['GET','POST']) # method默认是GET
def login():
# 特殊的点---请求的东西不是通过参数拿的
# 需要导入request,通过这个来拿到请求方法
if request.method == 'GET':
# return 'Login' ==> HttpResponse
return render_template('login.html')
# request.form # GET 通过form表单提交过来的数据
# request.args # POST 通过url传过来的参数
user = request.form.get('user')
pwd = request.form.get('password')
if user == 'mcc' and pwd == '123':
return redirect('/index')
# 模板渲染的功能
# return render_template('login.html', error='用户名或者密码错误')
return render_template('login.html', **{'error' : '用户名或者密码错误'})
@app.route('/index')
def index():
# return '欢迎登录'
return render_template('index.html')
if __name__ == '__main__':
app.run()
前端页面的搭建
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
用户名<input type="text" name="user">
密码<input type="password" name="password">
<input type="submit" value="提交">{{error}}
</form>
</body>
</html>
思考:我们可以将templates文件修改吗?django中可以修改此名称吗?
我们可以修改这个路径的名称,只需要指定一下参数就好app = Flask(name,template_folder=) # 默认是templates,将这个东西修改了我们的名字也就变了,django也可以改,配置文件修改一下就好。
模板语法补充
模板语法中后缀名无所谓,其实本质上都是字符串,只不过是长得像HTML,不管任何语言和框架都一样,只不过写其他的东西不提示,所以我们默认就写html结尾
登录页面的路由跳转
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎登录</h1>
<img src="/static/1.jpeg" alt=""> # 我们在这里将名字改了之后发现图片不显示,所以和static的路径无关,是根据static_folder来指定的
# 前端的前缀是可以修改的,我们可以让他叫任意的名字,那么我们就得通过修改static_url_path=/名字
</body>
</html>
配置文件的相关信息
def __init__(
self,
import_name, # __name__
static_url_path=None, # 就是他,只需要指定这个就好 /前缀名字
static_folder="static", # 静态文件的配置,一般情况下都叫static,但是可以通过设置指定
static_host=None,
host_matching=False,
subdomain_matching=False,
template_folder="templates", # 模板语法
instance_path=None,
instance_relative_config=False,
root_path=None,
):
总结:
所以如果要修改静态文件和模板文件夹的名字,你只需要在Flask(name)中指定相应的参数就好
原文地址:https://www.cnblogs.com/mcc61/p/11408924.html
- 条件表达式的短路求值与函数的延迟求值
- 使用CTE解决复杂查询的问题
- WinDbg调试.NET程序入门
- Release编译模式下,事件是否会引起内存泄漏问题初步研究 疑问:
- 10种简单的Java性能优化学习
- 巧用枚举类型,实现项目的多语言切换
- 影响Java调用性能有哪些因素
- 如何为可扩展系统进行Java Socket编程
- 如何使用Windows卷影拷贝服务恢复文件和文件夹
- .net字符串数组查找方式效率比较
- 使用Ring Buffer构建高性能的文件写入程序
- 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架
- PDF.NET数据开发框架实体类操作实例
- 利用Burp Suite对OWASP Juice Shop进行渗透测试
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaWeb——MyBatis框架之多表查询操作实战案例总结(MyBatis1对1查询,MyBatis1对多查询,MyBatis多对多查询)
- kubernetes(二十二) 服务网格化istio入门
- 使用Ngrok将本地服务映射为公网服务
- 前端图片下载
- 使用JDBC连接MySQL数据库--典型案例分析(七)----批量插入员工信息
- NIO删除文件提示文件AccessDeniedException
- 使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询
- RocketMQ源码之路(一)搭建RocketMQ源码环境
- docker安装filebeat
- Java Jar源码反编译工具对比
- 深入理解JVM虚拟机---垃圾回收与内存分配
- rxjs pipe和filter组合的一个实际例子的单步调试
- SAP Spartacus基于travis的持续集成
- Angular里如何测试一个具有外部依赖的Component
- Angular Component的DOM单元测试