2012-11-02 54 views
0

外我使用CSS3手风琴效果,我想检测如果黑客将 使脚本做出并行请求;即: 我有一个登录表单,并在同一页面注册形式,但只有 一个是可见的,因为有一个CSS3:访问该页面,用户 剂必须是HTML5兼容。 我使用的技巧是:访问一个变量Requesthandler

class Register(tornado.web.RequestHandler): 
    def post(self): 
     tt = self.get_argument("_xsrf") + str(time.time()) 
     rtime = float(tt.replace(self.get_argument("_xsrf"), "")) 
     print rtime 
class LoginHandler(BaseHandler): 
    def post(self): 
     tt = self.get_argument("_xsrf") + str(time.time()) 
     ltime = float(tt.replace(self.get_argument("_xsrf"), "")) 
     print ltime 

我用xsrf变量,因为它是为每个用户唯一的,以 避免使服务器认为该请求来自同一 机到来。 现在我想要的:如何使时间值之间的差异: abs(ltime - rtime);意思是,我如何访问类之外RTIME, 我只知道如何在方法外部访问的价值,我要让 此操作来检测,如果该值小,则用户使用 一个脚本,使并行请求杀死服务器! 换言之(一般蟒蛇用户) 如果我有:

class Product: 
    def info(self): 
     self.price = 1000 
    def show(self): 
     print self.price 
>>> car = Product() 
>>> car.info() 
>>> car.show() 

1000 

但如果我另一个

class User: 
    pass 

那怎么办做出打印我self.price的方法,我试过 继承,但得到了错误:AttributeError:用户实例没有 属性'price',所以只传递方法,而不是属性?

回答

1

听起来好像您需要了解使用持久性数据存储的模型对象和模式。 tornado.web.RequestHandler以及您从其中继承的任何对象仅在您的请求期间存在。从服务器上收到URL到数据通过self.write()self.finish()发送回浏览器时。

我建议你看看一些Django的或Flask tutorials对于如何构建Python中的MVC应用程序的一些基本想法(没有涵盖这一点,我知道没有龙卷风教程)。

+0

谢谢你:D,据我所知,没有办法避免这两个处理程序的并行执行? –

+1

在龙卷风执行过程中,除非通过get()/ post()/请求处理程序方法上的@asynchronous装饰器来执行它,否则将执行此操作。由于它不是多线程的,即使装饰,你仍然只有一个执行路径。 – koblas

+0

但如果我使用获取时间的技巧,如果它没有执行,那么它是零,否则,它将是一个值,如果它是一个值,这个值不能太小,这是我的想法 –