def post(post_id=None, slug=None): try: _post = get_post(post_id, slug) except NoResultFound: abort(404) log.debug("post: %s", _post) return render_template("post/post_page.html", post=_post)
def json_post(post_id=None, slug=None): try: _post = get_post(post_id, slug) except NoResultFound: abort(404) _post = to_json(_post) log.debug("post: %s", _post) return _post
def new_post(): """ Create a new post. If :GET: present the form to submit a new post. If :POST:, if valid, submit the post and redirect to home. """ form = PostBlogForm() if form.validate_on_submit(): log.info("User %s submitted post %s", current_user, form.title.data) log.debug("CodeType: %s", form.code_type.data) if form.code_type.data is None: code = False else: code = True post = Post(title=form.title.data, slug=form.slug.data, content=form.text.data, user=current_user, code=code, code_type=form.code_type.data,) db.session.add(post) try: db.session.commit() except IntegrityError as exc: if exc.message.endswith("not unique"): log.error("Post '%s' was not unique in field '%s'", form.title.data, exc.message .split(" ", 2)[-1].rsplit(" ", 3)[0]) else: log.critical("Unknown Integrity Error with post '%s'", form.title.data, exc_info=True) db.session.rollback() flash("Integrity Error!", 'danger') return render_template("post/make_post.html", title="Post Blog", form=form) except: log.critical("Exception on %s [%s]", 'page', 'method', exc_info=True) db.session.rollback() abort(500) flash("{} submitted {}.".format( current_user.username, form.title.data), 'success') return redirect(url_for('index')) return render_template("post/make_post.html", title="Post Blog", form=form)
def new_post(): """ Create a new post. If :GET: present the form to submit a new post. If :POST:, if valid, submit the post and redirect to home. """ form = PostBlogForm() if form.validate_on_submit(): log.info("User %s submitted post %s", current_user, form.title.data) log.debug("CodeType: %s", form.code_type.data) if form.code_type.data is None: code = False else: code = True post = Post( title=form.title.data, slug=form.slug.data, content=form.text.data, user=current_user, code=code, code_type=form.code_type.data, ) db.session.add(post) try: db.session.commit() except IntegrityError as exc: if exc.message.endswith("not unique"): log.error("Post '%s' was not unique in field '%s'", form.title.data, exc.message.split(" ", 2)[-1].rsplit(" ", 3)[0]) else: log.critical("Unknown Integrity Error with post '%s'", form.title.data, exc_info=True) db.session.rollback() flash("Integrity Error!", 'danger') return render_template("post/make_post.html", title="Post Blog", form=form) except: log.critical("Exception on %s [%s]", 'page', 'method', exc_info=True) db.session.rollback() abort(500) flash( "{} submitted {}.".format(current_user.username, form.title.data), 'success') return redirect(url_for('index')) return render_template("post/make_post.html", title="Post Blog", form=form)
def register(request): if request.session.get('is_login', None): return redirect('/') if request.method == "POST": log.debug('--> post') register_form = RegisterForm(request.POST) # log.info(register_form) message = '请检查填写的内容' if register_form.is_valid(): username = register_form.cleaned_data['username'] password1 = register_form.cleaned_data['password1'] password2 = register_form.cleaned_data['password2'] email = register_form.cleaned_data['email'] sex = register_form.cleaned_data['sex'] if password1 != password2: message = '两次输入的密码不同' return render(request, 'register.html', locals()) else: same_username = User.objects.filter(user_name=username) if same_username: message = "用户名已存在" return render(request, 'register.html', locals()) same_mail = User.objects.filter(email=email) if same_mail: message = "邮箱已存在" return render(request, 'register.html', locals()) new_user = User( user_name=username, password=md5_code(password1), # 使用md5加密 email=email, sex=sex) new_user.save() code = make_confirm_string(new_user) send_register_mail(email, code) message = "请前往注册邮箱,进行邮件确认" return render(request, 'confirm.html', locals()) # 跳到邮件确认页 register_form = RegisterForm() return render(request, 'register.html', locals())
def login(request): # 不允许重复登录 res = request.session.get('is_login') log.debug(f'request session --> {res}') if request.session.get('is_login', None): return redirect('/') if request.method == "POST": login_form = UserForm(request.POST) message = "请检查填写的内容" if login_form.is_valid(): username = login_form.cleaned_data['username'] password = login_form.cleaned_data['password'] try: user = User.objects.get(user_name=username) if user.has_confirmed == False: message = "用户还未邮件确认" return render(request, 'login.html', locals()) if user.password == md5_code(password): # 往session字典内写入用户状态和数据 request.session['is_login'] = True request.session['user_id'] = user.id request.session['user_name'] = user.user_name log.info(request.session['user_name']) return redirect('/') else: message = "密码不正确!" except: message = "用户不存在!" return render(request, 'login.html', locals()) ''' 这里使用了一个小技巧,Python内置了一个locals()函数,它返回当前所有的本地变量字典, 我们可以偷懒的将这作为render函数的数据字典参数值,就不用费劲去构造一个形如 {'message':message, 'login_form':login_form}的字典了。 这样做的好处当然是大大方便了我们,但是同时也可能往模板传入了一些多余的变量数据,造成数据冗余降低效率 ''' login_form = UserForm() return render(request, 'login.html', locals())
def __init__(self, session): log.debug("Creating User View") super(UserAdmin, self).__init__(User, session)
def is_accessible(self): log.debug("Checking Authentication") return current_user.is_authenticated()