在我的视图函数中,我想调用另一个视图并将数据传递给它:
return redirect('some-view-name', backend, form.cleaned_data)
Run Code Online (Sandbox Code Playgroud)
,其中后端是registration.backends对象,而form.cleaned_data是表单数据的字典(但必须以*args或**kwargs的形式发送,以防止Don't mix *args and **kwargs in call to reverse()!出现错误).从我在文档中找到的内容:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Run Code Online (Sandbox Code Playgroud)
看起来我需要提供'some-view-name'参数,但它只是视图函数的名称,还是url的名称?所以我想使它类似于在django-registration中完成的方式,其中:
to, args, kwargs = backend.post_registration_redirect(request, new_user)
return redirect(to, *args, **kwargs)
def post_registration_redirect(self, request, user):
return ('registration_complete', (), {})
Run Code Online (Sandbox Code Playgroud)
好的,我现在可以直接调用我的视图功能,还是需要提供一个网址?更重要的是,我的funciotn调用(以及需要时的URL)应该是什么样的?后端和cleaning_data都只是通过此视图传递以供以后使用.我试过这个,但不合适:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Run Code Online (Sandbox Code Playgroud)
除此之外:
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
Run Code Online (Sandbox Code Playgroud)
还是NoReverseMatch.但是在django-registration中,我看到过这样的事情:
url(r'^register/$',register,{'backend': 'registration.backends.default.DefaultBackend'}, name='registration_register'),
def register(request, backend, success_url=None, form_class=None,
disallowed_url='registration_disallowed',
template_name='user/login_logout_register/registration_form.html',
extra_context=None):
Run Code Online (Sandbox Code Playgroud) 我写了一个函数,用于添加电子邮件到新闻通讯库.直到我添加检查已发送电子邮件的有效性,它才能完美运行.现在,每次我收到"错误的电子邮件"作为回报.任何人都可以在这看到任何错误吗?使用的正则表达式是:
\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b它是100%有效(http://gskinner.com/RegExr/),但我可能使用它错了,或者它可能是一些逻辑错误:
def newsletter_add(request):
if request.method == "POST":
try:
e = NewsletterEmails.objects.get(email = request.POST['email'])
message = _(u"Email is already added.")
type = "error"
except NewsletterEmails.DoesNotExist:
if validateEmail(request.POST['email']):
try:
e = NewsletterEmails(email = request.POST['email'])
except DoesNotExist:
pass
message = _(u"Email added.")
type = "success"
e.save()
else:
message = _(u"Wrong email")
type = "error"
import re
def validateEmail(email):
if len(email) > 6:
if re.match('\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b', email) != None:
return 1
return 0
Run Code Online (Sandbox Code Playgroud) 我正在调用我的表单,附加参数'validate:
form = MyForm(request.POST, request.FILES, validate=True)
我应该如何编写form的init方法来访问我的表单体内的这个参数(例如在_clean方法中)?这就是我想出的:
def __init__(self, *args, **kwargs):
try:
validate = args['validate']
except:
pass
if not validate:
self.validate = False
elif:
self.validate = True
super(MyForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud) 我有这样的功能friend_exists:
def friend_exists(request, pid):
result = False
try:
user = Friend.objects.get(pid=pid)
except Friend.DoesNotExist:
pass
if user:
result = True
return result
Run Code Online (Sandbox Code Playgroud)
我从我的其他函数调用它:
exists = friend_exists(form.cleaned_data['pid'])
Run Code Online (Sandbox Code Playgroud)
哪里pid = u'12345678'.为什么我得到:
Exception Type: TypeError at /user/register/
Exception Value: friend_exists() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?