我不知道这样的事情是否可能,但我想根据urls.py配置中的命名组值调用一个函数。
这就是我一直在看的
url.py片段
url(r'^ajax/ValidateLogin/(?P<funcname>\w{13})/$', Validate),
views.py片段
def checkUsername(request):
user = User.objects.get(username=request.POST.get('username',''))
if user == None:
response = simplejson.dumps({'success':'True','validate':'True'})
else:
response = simplejson.dumps({'success':'True','validate':'False'})
return HttpResponse(response,content_type='application/javascript; charset=utf-8')
def Validate(request,funcname):
return funcname(request)
这只是返回unicode对象不可调用,我理解但是如何将其转换为调用视图函数检查用户名?应该调用它的url示例是ajax / ValidateLogin / checkUsername
由于
答案 0 :(得分:4)
remote_function_calls = {
'check_username' : check_username,
}
def Validate(request, funcname):
try:
return remote_function_calls[funcname](request)
except KeyError:
response = http.HttpResponse("Invalid function")
response.status_code = 403
return response
def valid_function(request):
return http.HttpResponse("This function may be called remotely")
valid_function.remote_call_valid = True
def erase_everything_function(request):
world.delete()
valid_functions = dict([(k, v) for k, v in globals().iteritems() if
getattr(v, 'remote_call_valid', None) == True])
答案 1 :(得分:0)
使用此:
def Validate(request,funcname):
return locals()[funcname](request)
虽然这种事情有点安全风险,因为任何用户都可以通过传递正确的“funcname”来调用python可用的任意函数。