flask请求与会话机制

本文介绍了Flask框架中的请求处理,包括GET、POST请求的参数获取、请求源和地址、Cookie处理以及文件上传。同时,文章还探讨了会话机制,如设置、获取和删除Cookie,以及登录装饰器的实现。

上午

1,flask请求 django中的请求,request(形参,包含请求信息的请求对象)提供了methods,post,get,body
flask提供了一个请求对象request(请求上下文),提供了一些丰富方法:
1,获取get请求的参数 类字段的对象
2,获取post请求的参数
3,请求方式POST GET
4,获取请求的来源
5,127.0.0.1:5000
6,http://127.0.0.1:5000/
7,请求的地址
8,获取cookie
9,上传文件

1,data = request.args.get('name',13234)
2,data = request.form.get('name')
3,data = request.method
4,data = request.referrer
5,data = request.host
6,data = request.host_url
7,data = request.url
8,data = request.cookie
9,data = request.files
print(data)

当出现405错误 因为flask默认接受get请求,不接受post请求
1,获取get请求的参数 类字段的对象
2,获取post请求的参数

@app.route('/reqtest/',methods=['POST'])
def reqtest():
 data = request.args.get('name',1223)
 data = request.form.get('name')
 print(data)
 return 'reqtest'

form表单发送get和post请求
form表单发送get请求

@app.route('/reqTest/')
def reqTest():
 name = request.get('pwd')
 pwd = request.get(pwd)
 print(name)
 print(pwd)
 return render_template('reqtest.html)

form表单

<form action=''>
 姓名:<input type='text' name='name'>
 密码:<input type='password' name='pwd'>
 <input type='submit' value='提交'>
</form>

form表单发送post请求

@app.route('/reqTest,method=['POST'.'GET'])
def reqTest():
 name = request.form.get('name')
 pwd = request.form.get('pwd')
 print(name)
 print(pwd)
 return render_template('reqTest.html')
<form action='' method='post'>
 姓名:<input type='text' name='name'>
 密码:<input type=password name=pwd
 <input type='submit' value='提交'>
</form>

3,登录注册
视图

from flask import redirect
@app.route('/login/',methods=['POST','GET'])
def Login():
 name = request.form.get('password')
 if name and project:
  user = User.query.filter(User.password==password,User==name).first()
  if user:
   return redirect('/courses/')
  return redirect('/index')

重定向

  return redirect('/index')
 @app.route('/register/',methods=['POST','GET'])
 def register():
  if request.method=='POST':
   username=request.form.get('username')
   password=request.form.get('password')
   if username and password:
    user=User()
    user.password=password
    user.name=username
    user.role_id=2
    user.save()
  return redirect('/index')
 return render_template('register.html')

4,图片上传

django中 -》pillow+imagefiled+upload_to+路径(上传的路径) flask中
request.files完成图片的上传,保存 方法:

 #photo=request.files.get('image')
 mthod=[one for one in dir(photo) if not one.startswith('_')]
 print(photo.filename) #图片的名字
 print(photo.headers) #请求头部信息
 print(photo.content_type) #文件类型
 print(photo.mimetype) #内容类型
 print(photo.mimetype_params) #类型参数
 photo.save(path) #保存文件
 
 上传保存图片到指定目录,并保存到数据库中
 import os
 filePath=os.path.join(STATIC_URL,filePath) #文件路径 static/img/1.jpg
 #保存文件到指定到位置 /static/img
 photo.save(path)
 #数据库中存 文件路径 img/1.jpg
 user=User.query.get(1)
 user.picture=filePath
 user.update()

form表单上传图片 视图

import os 
 @app.route('/filetest/',methods=['GET','POST'])
 def filetest():
  if request.method=='POST':
   photo=request.files.get('photo')
   print(photo)
   photo.save(path) #保存到本地
   user=User.query.get(1)
   user.picture=photo_path
   user.update()
  user=User.query.get(1)
  return render_template('filetest.html',**locals())

模板

<form action='' method='post' enctype='multipart/form-data'>
   <input type='file' name='photo'>
   <input type='submit' value='提交'>
  </form>
  <img src='/static/{{user.picture}}' alt=''>
  {{user.picture}}

下午

会话机制 cookie

设置cookie

django给响应对象设置cookie

  if user:
   response=redirect('/courses/')
   response.set_cookie('username,user.name')
   response.set_cookie('id',str(user.id))
   return response

获取cookie

  从request中获取
   from flask import request
   username=request.cookie.get('username')
   id=request.cookies.get('id')

删除cookie

@app.route('/a/')
 def a():
  response=redirect('/index')
  response=delete_cookie('username')
  response=delete_cookie('id')
  return response

登录装饰器

import functools
def LoginValid(func):
 @functools.wraps(func) #保留原函数的名字
 def inner(*args,**kwargs):
  #从cookie中取数据
  username=request.cookies.get('username')
  id=request.cookies.get('id')
  if username and id:
   user=User.filter(User.id=id,User.name==username).first()
   if user:
    return func(*args,**kwargs)
   else:
    return redirect('/login/')
  else:
   return redirect('/login/')
 return inner

装饰器的使用

@app.route('/coures/')
@LoginValid
def courses():
 page=rquest.args.get('page',1) #第几页
 #if page:
  #page=int(page)
 #else:
  #page=1
 page_num=10 #每页显示多少条
 label_list=Label.query.all()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值