用户需要拥有一个帐户才能使用该服务。用户单击发送给他们的链接后,如果他们没有帐户,系统会提示他们注册一个帐户。但是,在他们注册后,他们需要重定向回他们点击的原始链接。我不知道该如何去做,因为我不熟悉Django中基于类的视图。我在views.py中有注册表的以下类:
class SignUpView(bracesviews.AnonymousRequiredMixin,
bracesviews.FormValidMessageMixin,
generic.CreateView):
form_class = forms.SignupForm
model = User
template_name = 'accounts/signup.html'
success_url = reverse_lazy('home')
form_valid_message = "You're signed up!"
def form_valid(self, form):
r = super(SignUpView, self).form_valid(form)
username = form.cleaned_data["email"]
password = form.cleaned_data["password1"]
user = auth.authenticate(email=username, password=password)
auth.login(self.request, user)
return r
然后,在forms.py中,我有以下内容:
class SignupForm(authtoolsforms.UserCreationForm):
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.fields["email"].widget.input_type = "email" # ugly hack
self.helper.layout = Layout(
Field('type', placeholder='recruiter'),
Field('email', placeholder="Enter Email", autofocus=""),
Field('name', placeholder="Enter Full Name"),
Field('password1', placeholder="Enter Password"),
Field('password2', placeholder="Re-enter Password"),
Submit('sign_up', 'Sign up', css_class="btn-warning"),
)
我正在考虑在函数中使用self.request.path来获取"?next ="之后的路径。在网址中,因为我能够成功地使用登录重定向到原始链接,但我不确定如何通过注册保留网址。
非常感谢任何指导!
答案 0 :(得分:1)
您可以使用内置的上下文处理器执行此操作,方法是在注册页面URL的末尾添加请求路径。
如果您有一个指向用户点击的注册页面的链接,您可以包含请求路径,如下所示:
<a href="{% url 'user-signup' %}?next={{ request.path }}">Signup</a>
如果要从视图重定向用户,请在视图中附加带有请求对象的下一个参数,如下所示:
from django.http import HttpResponseRedirect
from django.urls import reverse
class ClassViewThatRedirectsUser(View):
def get(self, *args, **kwargs):
return HttpResponseRedirect("%s%s%s" % (reverse('user-signup'), "?next=", self.request.path))
确保您的设置文件中包含上下文处理器,对于Django 1.10,它包含在TEMPLATES中的OPTIONS下,它将如下所示:
TEMPLATES = [
{
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},