web开发python中会话和cookie的概念



我对web开发很陌生,我正在开发web.py框架来开发一个小型web应用程序。假设登录屏幕是localhost:9090/login,成功登录后重定向到下一页localhost:9090/details,单击另一个按钮add后再次重定向到localhost:9090/details/details_entry

但当我在浏览器上直接尝试localhost:9090/details时,它可以正常工作,甚至可以在不登录的情况下查看页面。所以在谷歌上搜索了很多之后,我知道我需要使用session concept,但我现在已经厌倦了在谷歌上忙于搜索网络概念。有人能告诉我的概念吗

  1. session(实际创建原因以及如何在python中通过页面登录后使用)

  2. 实际上CCD_ 9的完整概念是什么,创建用户登录页面需要遵循哪些步骤以及用户登录后要遵循的步骤当用户注销时会发生什么以及如何在python 中会话代码

我希望它是什么语言,但开发登录屏幕和通过创建一些会话ID重定向到下一个url的概念是相同的,因此用户身份验证概念非常重要,这个问题可能对其他人有用。

已编辑代码

---------------

登录.py

import os
import sys
import web
from web import form

render = web.template.render('templates/')

urls = (
'/',   'Login',
'/projects',  'Projects',
'/project_details',  'Project_Details',  
)
app = web.application(urls, globals())

web.config.debug = False
db = web.database(dbn='mysql', db='Python_Web', user='root', pw='redhat')
settings = {}
store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'user': None})
class Login:
login_form = form.Form( 
form.Textbox('username', form.notnull),
form.Password('password', form.notnull),
form.Button('Login'),
)
def GET(self):
form = self.login_form()
return render.login(form)
def POST(self):
if not self.login_form.validates():
return render.login(self.login_form)
i = web.input()
username = i.username
password = i.password
user = db.select('user',
where = 'user_login = $username', 
vars = {'username': username}
if username == user['username'] and password == user['password']:
session.user = username
raise web.seeother('/projects')
else:
return render.login_error(form)    
def auth_required(func):
def proxyfunc(self, *args, **kw):
print session.user,"=======> Session stored"
try:
if session.user:
return func(self, *args, **kw)
except:
pass
raise web.seeother("/")
return proxyfunc
class Projects:
project_list = form.Form( 
form.Button('Add Project'),
)
@auth_required
def GET(self):
project_form = self.project_list()
return render.projects(project_form)  
def POST(self):
raise web.seeother('/project_details')
if __name__ == "__main__":
web.internalerror = web.debugerror
app.run()  

在上面的代码中,成功登录后,页面将重定向到下一页。在这里,我需要实现会话概念,但在上面的代码中,我被困在了实现会话代码的位置上。有人能告诉我在上面登录页面的py代码中写会话代码的正确方法吗。完成这项工作后,需要在同一个py文件中实现注销功能

实现auth_required功能后编辑代码,得到以下错误

结果:

Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/web/application.py", line 239, in process
return self.handle()
File "/usr/lib/python2.7/site-packages/web/application.py", line 230, in handle
return self._delegate(fn, self.fvars, args)
File "/usr/lib/python2.7/site-packages/web/application.py", line 420, in _delegate
return handle_class(cls)
File "/usr/lib/python2.7/site-packages/web/application.py", line 396, in handle_class
return tocall(*args)
File "/home/local/user/python_webcode/index.py", line 102, in proxyfunc
print session.user,"=======> Session Stored"
File "/usr/lib/python2.7/site-packages/web/session.py", line 71, in __getattr__
return getattr(self._data, name)
AttributeError: 'ThreadedDict' object has no attribute 'user'

web.py提供了会话抽象和几个会话存储。您要做的是编写登录控制器,在GET上显示表单,在POST上查找用户并执行密码检查,然后将用户存储在会话中,并在注销时终止会话。之后,您可以编写decorator来检查会话中是否存在用户,以便通过控制器方法使用它。无论如何,用户身份验证的概念在所有web应用程序中基本相同。

如果您需要已经在工作的web.py解决方案,那么您可以看看这个模块:http://jpscaletti.com/webpy_auth/

如果您决定自己实现登录,最简单的auth-decorator可能如下所示:

def auth_required(func):
def proxyfunc(self, *args, **kw):
try:
if session.user:
# user is logged in
return func(self, *args, **kw)
except:
pass
# user is not logged in
raise web.seeother("/login")
return proxyfunc

然后,您将能够在如下控制器中的GET和POST方法之前使用@auth_required:

class Projects:
@auth_required
def GET(self):
pass

最新更新