关于狗书《Flask web开发 基于python的Web开发应用实战》中加入用户隐私功能

  目前是第二次撸狗书,在用户页面这一块我个人觉得有些问题(基于交互设计)。按理来说,我作为一个权限只有User的个人用户来说,肯定不喜欢让别人看到我的真实姓名,地址之类的敏感信息。所以我应该是可以设置成仅自己可看的。ok,话不多说上代码,这次我们从前端到后端。

1.在models中给User加一个字段"alow",默认值为True,然后上传到数据库中。

flasker/models

    allow = db.Column(db.Boolean, default=True)

  

$ flask db migrate
$ flask db upgrade

2.在修改个人信息的表单中加一个布尔框,用来设置“让不让别人看我的信息”。

flasker/app/main/forms/EditProfileForm

# 用户编辑自己的信息
class EditProfileForm(FlaskForm):
    name = StringField('真实姓名', validators=[Length(0, 64)])
    location = StringField('地区', validators=[Length(0, 64)])
    about_me = TextAreaField('About me')
    allow = BooleanField('不允许别人看我的资料') # 就这一行
    submit = SubmitField('提交')

3.在修改信息的路由中,加上allow值即可

flasker/app/main/views/edit_profile

@main.route('/edit-profile', methods=['GET', 'POST'])
@login_required
def edit_profile():
form = EditProfileForm()
if form.validate_on_submit():
current_user.name = form.name.data
current_user.location = form.location.data
current_user.about_me = form.about_me.data
current_user.allow = form.allow.data  # 这一行
db.session.add(current_user._get_current_object())
db.session.commit()
flash('您已经修改了您的信息')
return redirect(url_for('.user', username=current_user.username))
form.name.data = current_user.name
form.location.data = current_user.location
form.about_me.data = current_user.about_me
form.allow.data = current_user.allow  # 这一行
    return render_template('edit_profile.html', form=form)

  

  如上图

  最后在user路由中对用户访问限制一下即可,注意如果有管理员权限,也是可以访问的

flasker/app/main/views/user

@main.route('/user/<username>')
@login_required
def user(username):
user = User.query.filter_by(username=username).first_or_404()
if user is None:
abort(404)
if user != current_user and not current_user.can(Permission.ADMIN)\      、、、
and user.allow is False:
flash('该用户设置了隐私权限')
return redirect(url_for('.index'))
page = request.args.get('page', 1, type=int)
pagination = user.posts.order_by(Post.timestamp.desc()).paginate(
page, per_page=20,error_out=False)
posts = pagination.items
return render_template('user.html', user=user, posts=posts, pagination=pagination)

  

  这里会产生一个问题,如果user界面不恩能够访问,但是我像关注这个用户怎么办呢,目前我是吧关注按钮放在了外边,这样就能实现了

  这里只需要再index.html中添加一个span就可以了,具体代码参考user.html里面的关注模块。

猜你喜欢

转载自www.cnblogs.com/madeline1214/p/12027345.html