我知道有很多文字,但我不認爲這實際上是一個難以解決的問題。對於TLDR,請檢查問題的結尾。驗證碼不能在webpy上工作
所以,我試圖在我的web.py應用程序中實現基本的驗證碼形式。此代碼取自http://kzar.co.uk/blog/2009/07/14/web.py-captcha。我只是展示了我正在研究的一個基本測試示例,試圖找出我的大型應用程序中出現了什麼問題。
當我在索引頁上按回車時,即使我得到的代碼是正確的(我通過在終端上打印'captcha.py'中的'word'變量來驗證),我仍然收到一個錯誤,說我的驗證碼無效。我已經試過了所有的東西,並檢查了會話變量以及單詞變量,但無論我被告知我的代碼是錯誤的。這是整個測試應用程序。
test.py:
import web
from web import form
from captcha import getCaptcha
render = web.template.render('templates/')
urls = (
'/', 'index',
'/captcha.gif', 'captcha'
)
app = web.application(urls, locals())
if web.config.get('_session') is None:
session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'captcha': ''})
web.config._session = session
else:
session = web.config._session
vcaptcha = form.Validator('Please enter the code', lambda x:x == session.captcha)
enquiry_form = form.Form(
form.Textbox("captcha", vcaptcha, description="Validation Code", pre="<img src='/captcha.gif' valign=center><br>", class_="standard", style="width:70px;"),
)
class index:
# Display the create match page
def GET(self):
form = enquiry_form()
return render.captcha(form)
# Save the data
def POST(self):
form = enquiry_form()
if not form.validates(): # If there is an issue
return render.captcha(form) # Return them to the create page
else:
return "Success!"
class captcha:
def GET(self):
web.header("Content-Type", "image/gif")
captcha = getCaptcha()
session.captcha = captcha[0]
return captcha[1].read()
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
captcha.py:
from PIL import Image, ImageDraw, ImageFont
import cStringIO, random
def getCaptcha():
im = Image.new("RGB", (175, 60))
draw = ImageDraw.Draw(im)
for x in range(0, 175):
for y in range(0, 60):
draw.point((x, y), (135, 191, 107))
font = ImageFont.truetype('static/ZXX Camo.otf', 50)
alphabet = 'abcdefghijklmnopqrstuvwxyz'
word = ''
for i in range(5):
word = word + alphabet[random.randint(0, len(alphabet) -1)]
draw.text((5, 5), word, font=font, fill=(0, 0, 0))
f = cStringIO.StringIO()
im.save(f, "GIF")
f.seek(0)
return word, f
captcha.html:
$def with (form)
<head>
<link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon">
</head>
<h1>Testing Captcha</h1>
<form name="main" method="post">
$:form.render()
</form>
字體我我正在使用可在這裏:http://dl.dropbox.com/u/20517415/ZXX.zip
我完全困惑這裏發生了什麼。我相信這裏的錯誤代碼是驗證碼lambda x:x == session.captcha
。我已經嘗試過許多不同版本的這一行,似乎沒有任何工作。最令人困惑的是,我甚至可以將線路更改爲lambda x:x != session.captcha
,並且它仍然不起作用。我很感謝你的幫助。我一直在看這一段時間,不知道什麼是錯的。
TLDR;我在web.py應用中使用的一些基本的類似CAPTCHA的代碼無法識別正確的代碼條目,並且我已經提供了源文件供您檢查哪些是錯誤的。