python还未入门,求教一个python的问题

2010-09-03 08:46:51 +08:00
 iiduce
之前一直用C#,.net,最近转学python。昨晚写程序的时候遇到个问题不知怎么实现,向大家求教。

在.net(或VB)之类,都可以在页面中定义一个按钮,然后给按钮的click绑定服务器端事件。在python中应该怎样做类似的实现?

谢谢啦。
11153 次点击
所在节点    Python
58 条回复
iiduce
2010-09-04 00:37:08 +08:00
@rveo
既然你非要认为我问的问题是个和B/S原理相关的问题,推荐篇我的博客上曾经转载的一篇文章,

http://css9.net/what-happened-when-you-navigate/
rveo
2010-09-04 00:46:05 +08:00
@iiduce 嗯,你这篇文章是更详细地解释了B/S的交互细节。但是,里面发送请求也是离不开GET/POST,请求的网址依然是公开的。这个是不可能隐藏的。
ong
2010-09-04 00:50:05 +08:00
@iiduce 依然建议你学下.net的mvc框架,这样子你概念转换的速度会快点
iiduce
2010-09-04 00:52:33 +08:00
@rveo
要睡了,看到你的回复还是忍不住要说几句。

首先,我们一直说的都是B/S(浏览器程序)的事情,与C/S(客户端程序)无关。

其次,B/S里面包含S,即Server,即服务器。你强调的部分一直是B,浏览器在做的事情。

最后,在Server中,我们同样可以去通过Get/Post方式请求网址,Server中做的事情对于浏览者来说is a secret。
iiduce
2010-09-04 00:54:58 +08:00
@ong

我认同,是概念转换的问题。
rveo
2010-09-04 01:02:01 +08:00
@iiduce 莫非我搞错了?你请求一个网址 X 到服务器,你在服务器端转去 M,对于用户可能是不知道 M ,但是,你这个 X 是公开的啊,只要请求 X 就可以得到 M 的数据,我何必管你 M 是什么呢?
iiduce
2010-09-04 01:16:04 +08:00
@rveo
就拿上面zaykl同学写的示例来说:
html:
<form action="/MainPage" method="post">
<input type="text" name="num" />
<input type="submit" />
</form>

python:
class MainPage(webapp.RequestHandler):
def post(self):
num = self.request.get("num")
url='http://www.v2ex.com/' +num
content=urllib2.open(url).read()
self.response.out.write(content)

其中网址X应该是“/MainPage”,网址X应该是“http://www.v2ex.com/3”

X是公开了,但是他接受的是post请求,第三方又如何使用?
Majia
2010-09-04 01:31:16 +08:00
当服务器收到request之后,想怎么弄就怎么弄啊
iiduce
2010-09-04 01:42:28 +08:00
@Majia
受浏览器局限,post请求是不允许跨域提交的。
GordianZ
2010-09-04 02:10:48 +08:00
@iiduce JS不能跨域,但是HTML FORM没有任何问题啊
而且你的表述实在是让人难以明白 =。=
rveo
2010-09-04 02:10:56 +08:00
@iiduce 可以用其他程序,
比如,ASP.Net 里就有 HttpWebRequest 可以跨域发送 POST 请求,ASP 里有 xmlhttp ,PHP 里有 file_get_contents / fsockopen 等等。

完全可以跨域 POST 请求 X/MainPage 路径,才不管你 “http://www.v2ex.com/3” 呢!

甚至,我还可以冒充 X 这个网址发送请求到 X/MainPage ~

现在很多网站注册或者登录要用验证码,其实就是为了防止非法提交。。
zxb888
2010-09-04 06:54:06 +08:00
有意思的问题,有意思的回答!
我相信#22的 @rveo 说的是完全正确的!
est
2010-09-04 09:36:56 +08:00
研究html+http底层最好从CGI入手。写几次CGI程序之后什么FCGI WSGI都不在话下了。对MVC也会有更深的了解。
zuroc
2010-09-08 14:49:57 +08:00
1.用jquery
2.html页面里面写 $.post("/xx/xx/xx",{data:data},function(){
//............
})
3.定义/xx/xx/xx
makestory
2010-09-09 00:05:52 +08:00
@Majia

有些不明白你为什么想要隐藏调用的url。

是不是可以这样:把需要的请求的地址进行加密,然后在服务器端进行解密,还原出可读的请求,再进行响应,这样就相当于隐藏了接口了。

不过这么做还是感觉很奇怪..
sdhjl2000
2010-11-13 00:48:16 +08:00
晕,lz没表达清楚啊,按提问的意思是简单的post/get搞定,再说webform的postback的viewstate也是可以base64解密看的也不安全。 看你4楼的回复你的意思应该是在服务器端模拟一个请求或者调用webservice等,而不将请求的实际服务页面等写在js里,在c#里有webrequest可以模拟请求或使用webservice,py里好像有个module是httplib.但是服务器端的执行的东西本身对前台就是不可见如果把权限控制好了后台验证,别人看不看得到请求的参数页面等又有什么关系呢
chone
2010-11-13 04:05:49 +08:00
这些由html+css+javascript管的。
普通情况用form,需要异步的时候使用ajax
form就是普通的post,get request没有跨域限制,跨域不能的是ajax
chone
2010-11-13 04:06:51 +08:00
@chone 总之这些和python完全没关系

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/2253

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX