def paste_clipboard_to_folder(request):
if True:
# TODO: cleanly remove Clipboard code if it is no longer needed
return HttpResponseBadRequest('not implemented anymore')
if request.method == 'POST':
folder = Folder.objects.get(id=request.POST.get('folder_id'))
clipboard = Clipboard.objects.get(id=request.POST.get('clipboard_id'))
if folder.has_add_children_permission(request):
tools.move_files_from_clipboard_to_folder(clipboard, folder)
tools.discard_clipboard(clipboard)
else:
raise PermissionDenied
redirect = request.GET.get('redirect_to', '')
if not redirect:
redirect = request.POST.get('redirect_to', '')
return HttpResponseRedirect(
'{0}?order_by=-modified_at{1}'.format(
redirect,
admin_url_params_encoded(request, first_separator='&'),
)
)
python类HttpResponseRedirect()的实例源码
def response_change(self, request, obj):
"""
Overrides the default to be able to forward to the directory listing
instead of the default change_list_view
"""
if (
request.POST and
'_continue' not in request.POST and
'_saveasnew' not in request.POST and
'_addanother' not in request.POST
):
if obj.parent:
url = reverse('admin:filer-directory_listing',
kwargs={'folder_id': obj.parent.id})
else:
url = reverse('admin:filer-directory_listing-root')
url = "{0}{1}".format(
url,
admin_url_params_encoded(request),
)
return HttpResponseRedirect(url)
return super(FolderAdmin, self).response_change(request, obj)
def redirect_to_login(next, login_url=None,
redirect_field_name=REDIRECT_FIELD_NAME):
"""
Redirects the user to the login page, passing the given 'next' page
"""
resolved_url = resolve_url(login_url or settings.LOGIN_URL)
login_url_parts = list(urlparse(resolved_url))
if redirect_field_name:
querystring = QueryDict(login_url_parts[4], mutable=True)
querystring[redirect_field_name] = next
login_url_parts[4] = querystring.urlencode(safe='/')
return HttpResponseRedirect(urlunparse(login_url_parts))
# 4 views for password reset:
# - password_reset sends the mail
# - password_reset_done shows a success message for the above
# - password_reset_confirm checks the link the user clicked and
# prompts for a new password
# - password_reset_complete shows a success message for the above
def response_post_save_change(self, request, obj):
"""
Figure out where to redirect after the 'Save' button has been pressed
when editing an existing object.
"""
opts = self.model._meta
if self.has_change_permission(request, None):
post_url = reverse('admin:%s_%s_changelist' %
(opts.app_label, opts.model_name),
current_app=self.admin_site.name)
preserved_filters = self.get_preserved_filters(request)
post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url)
else:
post_url = reverse('admin:index',
current_app=self.admin_site.name)
return HttpResponseRedirect(post_url)
def redirect_to_login(next, login_url=None,
redirect_field_name=REDIRECT_FIELD_NAME):
"""
Redirects the user to the login page, passing the given 'next' page
"""
resolved_url = resolve_url(login_url or settings.LOGIN_URL)
login_url_parts = list(urlparse(resolved_url))
if redirect_field_name:
querystring = QueryDict(login_url_parts[4], mutable=True)
querystring[redirect_field_name] = next
login_url_parts[4] = querystring.urlencode(safe='/')
return HttpResponseRedirect(urlunparse(login_url_parts))
# 4 views for password reset:
# - password_reset sends the mail
# - password_reset_done shows a success message for the above
# - password_reset_confirm checks the link the user clicked and
# prompts for a new password
# - password_reset_complete shows a success message for the above
def response_post_save_add(self, request, obj):
"""
Figure out where to redirect after the 'Save' button has been pressed
when adding a new object.
"""
opts = self.model._meta
if self.has_change_permission(request, None):
post_url = reverse('admin:%s_%s_changelist' %
(opts.app_label, opts.model_name),
current_app=self.admin_site.name)
preserved_filters = self.get_preserved_filters(request)
post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url)
else:
post_url = reverse('admin:index',
current_app=self.admin_site.name)
return HttpResponseRedirect(post_url)
def response_post_save_change(self, request, obj):
"""
Figure out where to redirect after the 'Save' button has been pressed
when editing an existing object.
"""
opts = self.model._meta
if self.has_change_permission(request, None):
post_url = reverse('admin:%s_%s_changelist' %
(opts.app_label, opts.model_name),
current_app=self.admin_site.name)
preserved_filters = self.get_preserved_filters(request)
post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url)
else:
post_url = reverse('admin:index',
current_app=self.admin_site.name)
return HttpResponseRedirect(post_url)
def disconnect(request, backend, association_id=None):
associated = request.user.social_auth.count()
url = request.REQUEST.get(REDIRECT_FIELD_NAME, '') or backend_setting(backend, 'SOCIAL_AUTH_DISCONNECT_REDIRECT_URL') or DEFAULT_REDIRECT
if not request.user.has_usable_password() and associated <= 1:
messages.error(request, _("Cannot remove the only Social Account without first setting a Password or adding another Social Account."))
return HttpResponseRedirect(url)
usa = request.user.social_auth.get(pk=association_id)
backend.disconnect(request.user, association_id)
messages.success(request, _("Removed the %(provider)s account '%(uid)s'.") % {
"provider": usa.provider,
"uid": usa.extra_data.get("display", usa.uid) if usa.extra_data is not None else usa.uid,
})
return HttpResponseRedirect(url)
def change_locale(request):
"""
Redirect to a given url while changing the locale in the path
The url and the locale code need to be specified in the
request parameters.
"""
next = request.REQUEST.get('next', None)
if not next:
referrer = request.META.get('HTTP_REFERER', None)
if referrer:
next = urlsplit(referrer)[2]
if not next:
next = '/'
_, path = utils.strip_path(next)
if request.method == 'POST':
locale = request.POST.get('locale', None)
if locale and check_for_language(locale):
if localeurl_settings.USE_SESSION:
request.session['django_language'] = locale
path = utils.locale_path(path, locale)
response = http.HttpResponseRedirect(path)
return response
def process_request(self, request):
if request.method == 'POST' and \
request.POST.get('lti_message_type') == 'basic-lti-launch-request':
logger.debug('received a basic-lti-launch-request - '
'authenticating the user')
# authenticate and log the user in
user = auth.authenticate(request=request)
if user is not None:
# User is valid.
# Set request.user and
# persist user in the session by logging the user in.
logger.debug('user was successfully authenticated; '
'now log them in')
request.user = user
auth.login(request, user)
return HttpResponseRedirect(request.get_full_path())
def add_relation(request):
if request.method == 'POST':
form = EditRelationForm(request.POST)
if "cancel" in form.data: # has to be tested before data is cleaned
return HttpResponseRedirect(request.POST['url']
if 'url' in request.POST else '/')
if form.is_valid():
form.save()
relation = SemanticRelation.objects.get(
relation_code=form.cleaned_data["relation_code"])
return HttpResponseRedirect(relation.get_absolute_url())
else:
form = EditRelationForm()
return render_template(request, "relation_edit.html",
{"form": form,
"relation": "Add semantic relation"})
# -- semantic extensions --------------------------------------------------
def alter_profile(request, username=None):
if username:
the_user = get_object_or_404(User, username__exact=username)
else:
the_user = request.user
if request.method == 'POST':
redirect_url = reverse("view-profile-user", args=[the_user.username])
form = UserAlterDetailsForm(request.POST)
if "cancel" in form.data: # has to be tested before data is cleaned
return HttpResponseRedirect(redirect_url)
assert form.is_valid()
if form.is_valid():
for key in form.cleaned_data:
setattr(the_user, key, form.cleaned_data[key])
the_user.save()
msg = "Profile details changed"
messages.add_message(request, messages.INFO, msg)
return HttpResponseRedirect(redirect_url)
else:
# form = UserAlterDetailsForm(initial=the_user.__dict__)
form = UserAlterDetailsForm(instance=the_user)
return render_template(request, "profiles/alter_profile.html",
{"the_user": the_user,
"form": form})
def post(self, request, pk, **kwargs):
instance = CognateClassCitation.objects.get(id=pk)
form = EditCognateClassCitationForm(request.POST, instance=instance)
try:
# validate {ref foo ...}
s = Source.objects.all().filter(deprecated=False)
pattern = re.compile(r'(\{ref +([^\{]+?)(:[^\{]+?)? *\})')
for m in re.finditer(pattern, form.data['comment']):
foundSet = s.filter(shorthand=m.group(2))
if not foundSet.count() == 1:
raise ValidationError('In field “Comment” source shorthand “%(name)s” is unknown.',
params={'name': m.group(2)})
form.save()
except ValidationError as e:
messages.error(
request,
'Sorry, the server had problems updating the cognate citation. %s' % e)
return self.render_to_response({"form": form})
return HttpResponseRedirect(reverse('cognate-class-citation-detail', args=[pk]))
def post(self, request):
form = ChooseNexusOutputForm(request.POST)
if form.is_valid():
export = NexusExport(
exportName=self.fileNameForForm(form),
description=form.cleaned_data["description"])
export.setSettings(form)
export.bump(request)
export.save()
theId = export.id
e = NexusExport.objects.get(id=theId)
e.exportName = "Exp%04d_%s" % (theId, e.exportName)
e.save()
return HttpResponseRedirect('/nexus/export/')
messages.error(request,"Please provide a short description.")
return self.render_to_response({"form": form})
def post_model_create_view(request):
form = PostModelForm(request.POST or None)
context = {
"form": form
}
if form.is_valid():
obj = form.save(commit=False)
#print(obj.title)
obj.save()
messages.success(request, "Created a new blog post!")
context = {
"form": PostModelForm()
}
#return HttpResponseRedirect("/blog/{num}".format(num=obj.id))
template = "blog/create-view.html"
return render(request, template, context)
#@login_required
def _get_confirm_page(self, request):
kwargs = {}
kwargs['teacher'] = teacher = self.get_teacher(request)
parent = self.get_parent(request)
if parent is None:
redirect_url = _get_auth_redirect_url(request, teacher.id)
logger.warning(redirect_url)
return HttpResponseRedirect(redirect_url)
kwargs['parent'] = parent
grade_id = request.GET.get('grade_id')
grade = models.Grade.objects.get(id=grade_id)
kwargs['grade_subject_name'] = grade.name + teacher.subject().name
school_id = request.GET.get('school_id')
school = models.School.objects.get(id=school_id)
kwargs['school_name'] = school.name
# wxsdk config
url = request.build_absolute_uri()
sign_data = _jssdk_sign(url)
kwargs.update(sign_data)
kwargs['WX_APPID'] = settings.WEIXIN_APPID
return render(request, self.confirm_page, kwargs)
def get(self, request):
kwargs = {}
kwargs['teacher'] = teacher = self.get_teacher(request)
parent = self.get_parent(request)
if parent is None:
redirect_url = _get_auth_redirect_url(request, teacher.id)
logger.warning(redirect_url)
return HttpResponseRedirect(redirect_url)
kwargs['parent'] = parent
now = timezone.now()
coupons = models.Coupon.objects.filter(parent=parent,
expired_at__gt=now, used=False
).order_by('used', '-amount',
'expired_at')
kwargs['coupons'] = sorted(coupons, key=lambda x: x.sort_key())
pre_chosen_coupon = None
# for coupon in coupons:
# if coupon.usable and coupon.mini_course_count==0:
# pre_chosen_coupon = coupon
# break
# pre_chosen_coupon = pre_chosen_coupon or coupons.first()
kwargs['pre_chosen_coupon'] = pre_chosen_coupon
return render(request, self.template_name, kwargs)
def phone_page(request):
template_name = 'wechat/parent/reg_phone.html'
teacherId = request.GET.get('state') # ??, ??, ??
openid = request.GET.get("openid")
if not openid:
openid = request.POST.get("openid")
nextpage = _get_reg_next_page(teacherId, openid)
parent = _get_parent(request)
if parent:
return HttpResponseRedirect(nextpage)
if not openid and settings.TESTING:
# the below line is real wx_openid, but not related with ours server
openid = 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o'
context = {
"openid": openid,
"teacherId": teacherId,
"nextpage": nextpage
}
return render(request, template_name, context)
def post(self, request, *args, **kwargs):
self.instance_forms()
self.setup_forms()
if self.valid_forms():
self.save_forms()
self.save_models()
self.save_related()
response = self.post_response()
cls_str = str if 2 < sys.version_info.major else basestring
if isinstance(response, cls_str):
return HttpResponseRedirect(response)
else:
return response
return self.get_response()
def post(self, request: HttpRequest, *args, **kwargs) -> HttpResponseRedirect:
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is None:
messages.error(request, _('No user account matches the entered credentials.'))
return redirect('backoffice:login')
if not user.is_active:
messages.error(request, _('User account is deactivated.'))
return redirect('backoffice:login')
if not is_backoffice_user(user):
messages.error(request, _('User does not have permission to access backoffice data.'))
return redirect('backoffice:login')
login(request, user)
url = request.GET.get('next')
if url and is_safe_url(url, request.get_host()):
return redirect(url)
return redirect('backoffice:main')