赞
踩
# 引用werkzurg的功能模块 from werkzeug.wrappers import Request,Response from werkzeug.serving import run_simple # 底层的用法 def run(environ,start_response): return [b'abcdefg'] if __name__ == '__main__': run_simple('localhost',4000,run) # 监听端口并执行run函数 # 另一种用法 @Response.application def hello(request): return Response('Hello World!') ''' return到底返回到客户端什么内容? 1、状态码:status code 200,301,404,返回一个响应的客户端的状态码; 2、content-type:告诉客户端用什么方式解析返回的值; 3、其他的返回头信息。 ''' if __name__ == __main__: run_simple('localhost',4000,hello)
from flask import Flask as fk , request,render_template as render,redirect,session,make_response app = fk(__name__) app.secret_key = 'abckd' # 设置session 的加密值 @app.route('/',methods=['GET','POST']) def index(): if request.method == 'POST': user = request.form.get('user') pwd = request.form['pwd'] if user == 'admin' and pwd == '123': print(user,pwd) return '登录成功!' return render('index.html',h1='你好') # home.add_url_rule('/',view_func=index) #第二种路由的声明方式,必须已“/”开头 if __name__ == '__main__': app.run(debug=True,host='192.168.0.11',port=5000) ''' 执行werkzurg中的run_simple('localhost',4000,hello) 这里只是socket进行了请求监听,当浏览器发起请求后 执行内部的__call__()方法 '''
<!-- 使用静态文件需要删除 <!DOCTYPE html> --> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/index.css" type="text/css"> <!-- javascript引用时必须添加type="text/javascript" --> <script language="javaacript" src="/statics/jquery.min.js" type="text/javascript"></script> <!-- 推荐使用这样加载静态文件 --> <link rel="stylesheet" href="{ { url_for('static',filename='index.css') }}" type="text/css"> <!-- url_for(),函数配置静态文件,一定要在Flask类中设置静态文件的路径和别名,蓝图中设置静态文件路径和别名是不能使用的 --> </head> <body> <h1>index</h1> <h1>{ { h1 }}</h1> <form action="/" method="POST"> <input type="text" name="user" > <input type="password" name="pwd"> <input type="submit" value="提交"> </form> </body> </html>
使用 url_for 函数获取静态资源时,必须在实例化 Flask 对象的时候设置 static_url_path(别名),static_folder(静态文件路径)
from flask import Flask
from .views.index import home
def shb():
app = Flask(__name__,static_url_path='/static',static_folder='./public',template_folder='./template')
'''
PS:
1、static_folder的路径一定要设置正确。
2、static_url_path的值必须是’/static‘,其他测试无效。
3、url(’static‘,filename='静态文件路径') 第一个值必须是’static‘,其他测试无效。
4、template_folder 配置注意存放路径。
5、蓝图中就不再配置存放静态文件的路径和引用别名了;模板也不用再配置,这里是全局配置。
'''
app.register_blueprint(home,url_prefix="/api")
return app
from flask import Flask,render_template,request,redirect,session
app = Flask(__name__) # __name__ 可以修改为任意字符串,并可以传入多个参数
app.secret_key = 'abckd' # 设置session加密多余字符串
# 路由装饰器,必须已“/”开头
@app.route('/login',methods=['GET','POST'])
# 定义与路由装饰器匹配的执行函数
def login():
print(request.method) # request 需要导入,获取请求的信息
session['key] = value # 设置session值
session.get('key') # 获取session的值
return render_template('login.html',**{
key:value})
#return render_template('login.html',key=value)
if __name__ == '__main__':
app.run(url,prot)
作用:为每个线程创建一个独立的空间,使得线程对自己空间中的数据进行操作(数据隔离)。
import threading
from threading import local
local_obj = local() # 实例化local对象
def task(i):
local_obj.xxx = i # 为local对象设置一个参数
print(local_obj.xxx,i) # 获取local对象中的参数
# threading.get_ident() 获取线程的唯一标示
print(threading.get_ident(),i)
for i in range(10):
t = threading.Thread(target=task,args(i,)) # 创建线程
t.start() # 开始执行线程
import threading import greenlet # 获取协程信息 DIC = { } def task(i): # 获取协成的唯一标记 # indent = greenlet.getcurrent() # treading.get_ident() 获取线程的唯一标记 indent = treading.get_ident() if indent in DIC: DIC[indent]['xxx'] = i else: DIC[indent] = { 'xxx':i} print(DIC[index][xxx],i) # 打印字典中的参数 for i in range(10): t = threading.Thread(target=task,args=(i,)) # 创建线程 t.start() # 开始执行线程
此版本中协程与线程可以完全的兼容,完成对请求的数据隔离。
为什么需要给线程和协程数据进行隔离?
在多个请求的时候,由于每个请求的信息不相同,所以需要对不同的请求信息进行分类管理(数据隔离),从而防止数据混乱;
这样在需要使用视图函数取得用户请求信息的时候,才能根据不同的信息进行取值和修改。
import threading
import time
try:
import greenlet # 获取协程信息
get_indent = greenlet
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。