def reset_password(request, **kwargs): form_class = kwargs.pop("form_class", ResetPasswordForm) template_name = kwargs.pop("template_name", settings.TEMPLATE_RESET_PASSWORD) group, bridge = group_and_bridge(kwargs) ctx = group_context(group, bridge) if request.method == "POST": password_reset_form = form_class(request.POST) if password_reset_form.is_valid(): email = password_reset_form.save() if group: redirect_to = bridge.reverse("acct_passwd_reset_done", group) return HttpResponseRedirect(redirect_to) else: redirect_to = reverse("acct_passwd_reset_done") return HttpResponseRedirect(redirect_to + "?email=" + email) else: soup = BeautifulSoup(str(password_reset_form.errors)) utils.addMsg(request, messages.ERROR, soup.ul.li.ul.li.contents[0]) # utils.addMsg(request, messages.ERROR, password_reset_form.errors) else: password_reset_form = form_class() ctx.update({"resetForm": password_reset_form}) return render_to_response(template_name, RequestContext(request, ctx))
def signup(request, **kwargs): form_class = kwargs.pop("form_class", SignupForm) template_name = kwargs.pop("template_name", settings.TEMPLATE_SIGNUP) redirect_field_name = kwargs.pop("redirect_field_name", "next") success_url = kwargs.pop("success_url", None) group, bridge = group_and_bridge(kwargs) ctx = group_context(group, bridge) if success_url is None: if hasattr(settings, "SIGNUP_REDIRECT_URLNAME"): fallback_url = reverse(settings.SIGNUP_REDIRECT_URLNAME) else: if hasattr(settings, "LOGIN_REDIRECT_URLNAME"): fallback_url = reverse(settings.LOGIN_REDIRECT_URLNAME) else: fallback_url = settings.LOGIN_REDIRECT_URL success_url = get_default_redirect(request, fallback_url, redirect_field_name) if request.method == "POST": form = form_class(request.POST, group=group) if form.is_valid(): user, emailAddress = form.save(request=request) if settings.ACCOUNT_EMAIL_VERIFICATION: user.is_active = False user.save() EmailConfirmation.objects.send_confirmation(emailAddress) ctx.update({"email": form.cleaned_data["email"], "success_url": success_url}) ctx = RequestContext(request, ctx) return render_to_response(settings.TEMPLATE_VERIFICATION_SENT, ctx) else: form.login(request, user) return render_to_response( "account/signup_success.html", RequestContext(request, {"email": user.email, "nickname": user.get_profile().name}), ) else: soup = BeautifulSoup(str(form.errors)) utils.addMsg(request, messages.ERROR, soup.ul.li.ul.li.contents[0]) # utils.addMsg(request, messages.ERROR, form.errors) else: form = form_class(group=group) motto = Motto.objects.get(id=random.randint(1, Motto.objects.getCount())) ctx.update( { "form": form, "redirect_field_name": redirect_field_name, "redirect_field_value": request.REQUEST.get(redirect_field_name), "motto": motto, } ) return render_to_response(template_name, RequestContext(request, ctx))
def password_change(request, **kwargs): form_class = kwargs.pop("form_class", ChangePasswordForm) template_name = kwargs.pop("template_name", "account/change_password.html") group, bridge = group_and_bridge(kwargs) if not request.user.password: return HttpResponseRedirect(reverse("set_passwd")) if request.method == "POST": password_change_form = form_class(request.user, request.POST) if password_change_form.is_valid(): password_change_form.save() utils.addMsg(request, messages.SUCCESS, ugettext(u"密码修改成功.")) password_change_form = form_class(request.user) return HttpResponseRedirect(reverse("profiles_setting")) else: soup = BeautifulSoup(str(password_change_form.errors)) utils.addMsg(request, messages.ERROR, soup.ul.li.ul.li.contents[0]) # utils.addMsg(request, messages.ERROR, password_change_form.errors) else: password_change_form = form_class(request.user) ctx = group_context(group, bridge) ctx.update({"pwdform": password_change_form}) return render_to_response(template_name, RequestContext(request, ctx))
def setProfile(request, **kwargs): """用户profile设置""" template = kwargs.pop("template", settings.TEMPLATE_SETTINGS) if request.method == "POST": form = ProfileForm(request.POST, user=request.user) if form.is_valid(): profile = form.save(request) if profile: utils.addMsg(request, messages.SUCCESS, ugettext(u"更新设置成功.")) return HttpResponseRedirect(reverse("profiles_setting")) else: soup = BeautifulSoup(str(form.errors)) utils.addMsg(request, messages.ERROR, soup.ul.li.ul.li.contents[0]) # utils.addMsg(request, messages.ERROR, form.errors) else : draftProfile = request.session.get("draftProfile", None) form = ProfileForm(user=request.user, draftProfile=draftProfile) if draftProfile: request.session["draftProfile"] = None return render_to_response(template, RequestContext(request, {"form": form}))
def login(request, **kwargs): form_class = kwargs.pop("form_class", LoginForm) template_name = settings.TEMPLATE_LOGIN # 如果是ajax弹出框登录,重置模板 if request.is_ajax(): template_name = settings.TEMPLATE_AJAX_LOGIN success_url = kwargs.pop("success_url", None) url_required = kwargs.pop("url_required", False) extra_context = kwargs.pop("extra_context", {}) redirect_field_name = kwargs.pop("redirect_field_name", "next") group, bridge = group_and_bridge(kwargs) if extra_context is None: extra_context = {} if success_url is None: if hasattr(settings, "LOGIN_REDIRECT_URLNAME"): fallback_url = reverse(settings.LOGIN_REDIRECT_URLNAME) else: fallback_url = settings.LOGIN_REDIRECT_URL success_url = get_default_redirect(request, fallback_url, redirect_field_name) if request.method == "POST" and not url_required: form = form_class(request.POST, group=group) if form.is_valid(): form.login(request) request.session["failedLoginCount"] = 0 return after_login(request, success_url) else: soup = BeautifulSoup(str(form.errors)) utils.addMsg(request, messages.ERROR, soup.ul.li.ul.li.contents[0]) # utils.addMsg(request, messages.ERROR, form.errors) request.session["failedLoginCount"] = request.session.get("failedLoginCount", 0) + 1 else: form = form_class(group=group) ctx = group_context(group, bridge) motto = Motto.objects.get(id=random.randint(1, Motto.objects.getCount())) ctx.update( { "form": form, "url_required": url_required, "redirect_field_name": redirect_field_name, "next": request.REQUEST.get("next", success_url), "redirect_field_value": request.REQUEST.get(redirect_field_name), "motto": motto, } ) ctx.update(extra_context) return render_to_response(template_name, RequestContext(request, ctx))
def send_confirm_email(request): email = request.GET.get("email") try: emailAddress = EmailAddress.objects.get(email=email) except EmailAddress.DoesNotExist: log.warning("Email address not exists: %s" % email) EmailConfirmation.objects.send_confirmation(emailAddress) utils.addMsg(request, messages.SUCCESS, u"激活邮件已重发成功,请注意查收邮件") return render_to_response(settings.TEMPLATE_VERIFICATION_SENT, RequestContext(request, {"email": email}))
def addBook(request): '''新加书籍, post request only''' if request.method != "POST": raise Http404 authorName = request.REQUEST.get('authorName', None) authorDesc = request.REQUEST.get('authorDesc', None) bookName = request.REQUEST.get('bookName', None) bookPrice = request.REQUEST.get('bookPrice', None) bookIsbn = request.REQUEST.get('bookIsbn', None) bookPress = request.REQUEST.get('bookPress', None) bookDesc = request.REQUEST.get('bookDesc', None) bookBinding = request.REQUEST.get('bookBinding', None) bookPages = request.REQUEST.get('bookPages', None) bookSpic = request.REQUEST.get('bookSpic', None) bookMpic = request.REQUEST.get('bookMpic', None) bookLpic = request.REQUEST.get('bookLpic', None) bookPublishDate = request.REQUEST.get('bookPublishDate', None) stock = request.REQUEST.get('stock', None) category = request.REQUEST.get('category', None) author = Author(name=authorName, desc=authorDesc) author.save() price = float(''.join([ item for item in bookPrice if item in '1234567890.' ])) try: cate = Category.objects.get(label=category) except Category.DoesNotExist: raise Http404 try: book = Book.objects.get(isbn=bookIsbn) except Book.DoesNotExist: book = Book() book.name=bookName book.author=author book.price=price book.isbn=bookIsbn book.press=bookPress book.desc=bookDesc book.binding=bookBinding book.pages=bookPages book.spic=bookSpic book.mpic=bookMpic book.lpic=bookLpic book.publish_date=bookPublishDate book.stock=stock book.category=cate book.save() utils.addMsg(request, messages.SUCCESS, '添加成功!') return HttpResponseRedirect('/manage/reg_book/')
def submitFeedback(request): if request.POST: form = FeedbackForm(request.POST) if form.is_valid(): profile = None if request.user.is_authenticated(): profile = request.user.get_profile() feed = form.save(profile) utils.addMsg(request, messages.SUCCESS, u"意见提交成功,我们会尽快做出处理,谢谢关注!") return HttpResponseRedirect(reverse("us_feedback")) else: form = FeedbackForm() return render_to_response(settings.TEMPLATE_FEEDBACK, RequestContext(request,{'form':form,}))
def adminLogin(request, **kwargs): form_class = kwargs.pop("form_class", LoginForm) success_url = request.REQUEST.get("success_url", "/protocol/create_client/") if request.method == "POST": form = form_class(request.POST) if form.is_valid(): form.login(request) if request.user.is_superuser: return HttpResponseRedirect(reverse("management")) else: utils.addMsg(request, messages.ERROR, "非管理员账户不能登录") else: soup = BeautifulSoup(str(form.errors)) utils.addMsg(request, messages.ERROR, soup.ul.li.ul.li.contents[0]) # utils.addMsg(request, messages.ERROR, form.errors) return render_to_response("account/admin_login.html", RequestContext(request, {"form": form_class()}))
def setPic(request, template=settings.TEMPLATE_SETTINGS): """切剪并设置头像""" profile = request.user.get_profile() if not profile.tmp_pic: profile.tmp_pic = profile.big_pic profile.save() if request.method != 'POST': return render_to_response(settings.TEMPLATE_SETUP_PICTURE, RequestContext(request,)) img = None try: img = img_utils.open(PIC_ROOT, profile.tmp_pic) except IOError, Exception: utils.addMsg(request, messages.ERROR, u"读取文件错误!") return HttpResponseRedirect(reverse("profiles_setpic"))
def initPic(request, template=settings.TEMPLATE_SETUP_PICTURE, **kwargs): '''处理用户上传头像图片,或用户已有头像初始化显示''' if request.method != "POST": profile = request.user.get_profile() if not profile.tmp_pic: profile.tmp_pic = profile.big_pic profile.save() return render_to_response(settings.TEMPLATE_SETUP_PICTURE, RequestContext(request,)) # 处理POST请求,文件上传,存储 file = request.FILES["picture"] if not file: return HttpResponseRedirect(reverse("profiles_setpic")) if (len(file) > settings.PIC_UPPER_BOUND * 1024 * 1024): utils.addMsg(request, messages.ERROR, u"请确保上传的图片大小不超过2M!") return HttpResponseRedirect(reverse("profiles_setpic")) fname, ext = os.path.splitext(str(file)) if ext not in settings.ALLOWED_IMG_FORMAT: utils.addMsg(request, messages.ERROR, u"上传的图片格式不正确!") return HttpResponseRedirect(reverse("profiles_setpic")) filename = img_utils.upload(file, settings.PIC_SIZE_BIG, PROFILE_PIC_ROOT, 100) if not filename: utils.addMsg(request, messages.ERROR, u"图片上传失败!") return HttpResponseRedirect(reverse("profiles_setpic")) profile = request.user.get_profile() # tmp_pic临时存放上传的图片 profile.tmp_pic = "profile/%s" % (filename) profile.save() return HttpResponseRedirect(reverse("profiles_setpic"))
utils.addMsg(request, messages.ERROR, u"读取文件错误!") return HttpResponseRedirect(reverse("profiles_setpic")) XY = () try: XY = ( int(request.REQUEST.get("x1", '0')), int(request.REQUEST.get("y1", '0')), int(request.REQUEST.get("x2", '50')), int(request.REQUEST.get("y2", '50')) ) if XY[0] == XY[2] and XY[1] == XY[3]: raise Exception img = img.crop(XY) except: utils.addMsg(request, messages.WARNING, u"""还没有对头像进行剪切。剪切请在 大头像上按住、并拖动鼠标。若不需要剪切,可点击'撤销'""") return HttpResponseRedirect(reverse("profiles_setpic")) big_pic = img_utils.scalePic(img, PIC_ROOT, "profile", utils.genUuid()+'_b', settings.PIC_SIZE_BIG, 100) normal_pic = img_utils.scalePic(img, PIC_ROOT, "profile", utils.genUuid()+'_n', settings.PIC_SIZE_NORMAL, 80) small_pic = img_utils.scalePic(img, PIC_ROOT, "profile", utils.genUuid()+'_s', settings.PIC_SIZE_SMALL, 50) if big_pic and normal_pic and small_pic: ## 删除临时图片及设置之前的图片 if profile.tmp_pic != settings.DEFAULT_PIC: file_utils.remove(PIC_ROOT, profile.tmp_pic) if profile.big_pic != settings.DEFAULT_PIC: file_utils.remove(PIC_ROOT, profile.big_pic)