使用表单/cookie控制访问的最简单的wsgi中间件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用表单/cookie控制访问的最简单的wsgi中间件相关的知识,希望对你有一定的参考价值。

Not very secure, but very handy ...
Use like that :

app = your_wsgi_app()
app = ControlAccess( app, "your_password")
httpserve( app ) # wsgi server
  1. import Cookie,hashlib
  2. md5 = lambda x : hashlib.md5(x).hexdigest()
  3.  
  4. class ControlAccess:
  5. def __init__(self, appReal,password):
  6. self.appReal = appReal
  7. self.password=password
  8.  
  9. def __call__(self, environ, start_response):
  10. try:
  11. password = Cookie.SimpleCookie(environ.get("HTTP_COOKIE",""))["pass"].value
  12. except:
  13. password = ""
  14.  
  15. if password==md5(self.password):
  16. for i in self.appReal(environ, start_response):
  17. yield i
  18. else:
  19. try:
  20. passw=environ['wsgi.input'].read(int(environ['CONTENT_LENGTH'])).split("=")[-1]
  21. except:
  22. passw=""
  23. if passw == self.password:
  24. cookie = Cookie.SimpleCookie()
  25. cookie["pass"] = md5(self.password)
  26. start_response('200 OK', [('Content-type','text/html'),('Set-Cookie',cookie["pass"].OutputString())])
  27. yield """<html><head><meta http-equiv="refresh" content="0; url=/" /></head><body>welcome</body></html>"""
  28. else:
  29. start_response('200 OK', [('Content-type','text/html')])
  30. yield """<form method="post">
  31. Password <input type='password' name="password">
  32. <input type='submit' value="ok">
  33. </form>"""

以上是关于使用表单/cookie控制访问的最简单的wsgi中间件的主要内容,如果未能解决你的问题,请参考以下文章

使用WSGI创建REST接口

CI控制器怎样接受表单POST过来的数据?

将 AngularJS 范围变量从指令传递到控制器的最简单方法?

在数据库中保存 Django 的表单向导 form_list 的最简单方法?

Cookie和Session

直接访问登录表单时未设置会话 cookie,导致 CSRF 令牌无效