flask-用户资料

首先创建User模型

class User(UserMixin,db.Model):
    __tablename__ = ‘users‘  #..

name = db.Column(db.String(64))
    location = db.Column(db.String(64))
    about_me = db.Column(db.Text())
    member_since = db.Column(db.DateTime(),default=datetime.utcnow)
    last_seen = db.Column(db.DateTime(),default=datetime.utcnow)

刷新用户访问时间

    def ping(self):
        self.last_seen = datetime.utcnow()
        db.session.add(self)

app/auth/views.py :更新已登录用户的访问时间

@auth.before_app_request
# def before_request():
#     if current_user.is_authenticated:
#         current_user.ping()
#         if not current_user.confirmed #                 and request.endpoint[:5] != ‘auth.‘ :
#             return redirect(url_for(‘auth.unconfirmed‘))

用户资料页面

app/main/views.py

@main.route(‘/user/<username>‘)
def user(username):
    user = User.query.filter_by(username=username).first()
    if user is None:
        abort(404)
    return render_template(‘user.html‘, user=user)

用户资料页面的模板

{% block page_content %}
    <div class="page-header">
    <h1>{{ user.username }}</h1>
    </div>
    {% if user.name or user.location %}
    <p>
        {% if user.name %}{{ user.name }}{% endif %}
        {% if user.about_me  %}<p>{{ user.about_me }}</p>{% endif %}
        {% if user.location %}
        From<a href="http://maps.google.com/?q={{ user.location }}">{{ user.location }}</a>
        {% endif %}
    </p>
    {% endif %}

    {% if current_user.is_administrator() %}
        <p><a href="mailto:{{ user.email }}" >{{ user.email }}</a></p>
        <a class="btn btn-danger" href="{{ url_for(‘.edit_profile_admin‘,id=user.id) }}">Edit</a>
    {% endif %}
    <p>
        Member since {{ moment(user.member_since).format(‘L‘) }}.
        Last seen {{ moment(user.last_seen).fromNow() }}
    </p>

{% endblock %}

创建链接

        {% if current_user.is_authenticated %}
          <li><a href="{{ url_for(‘main.user‘,username=current_user.username) }}">个人资料</a></li>
          {% endif %}

用户级别的资料编辑器

class EditProfieForm(FlaskForm):
    name = StringField(u‘昵称‘,validators=[Length(0,64)])
    location = StringField(u‘地址‘,validators=[Length(0,64)])
    about_me = TextAreaField(u‘个性签名‘)
    submit = SubmitField(u‘提交‘)

资料编辑页面

app/main/views.py

@main.route(‘/edit-profile‘,methods=[‘GET‘,‘POST‘])
@login_required
def edit_profile():
    form = EditProfieForm()
    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
        db.session.add(current_user)
        db.session.commit()
        flash(u‘更新成功‘)
        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
    return render_template(‘edit_profile.html‘, form=form)

资料编辑的链接

        {% if user == current_user %}
        <a class="btn btn-danger" href="{{ url_for(‘.edit_profile_admin‘,id=user.id) }}">Edit</a>
        {% endif %}

管理员级别的资料编辑表单

app/main/forms.py

class EditProfieAdminForm(FlaskForm):
    email = StringField(u‘邮箱‘,validators=[Required(),Length(1,64),Email()])
    username = StringField(u‘用户名‘,validators=[Required(),Length(1,64),Regexp(‘^[A-Za-z][A-Za-z0-9_.]*$‘,0,u‘用户名必须只有字母,数字,.,和下划线‘)])
    confirmed = BooleanField(‘Confirmed‘)
    role = SelectField(‘Role‘,coerce=int)
    name = StringField(u‘昵称‘,validators=[Length(0,64)])
    location = StringField(u‘地址‘,validators=[Length(0,64)])
    about_me = TextAreaField(u‘个性签名‘)
    submit = SubmitField(u‘提交‘)

    def __init__(self,user,*args,**kwargs):
        super(EditProfieAdminForm,self).__init__(*args,**kwargs)
        self.role.choices = [(role.id,role.name)
                             for role in Role.query.order_by(Role.name).all()]
        self.user = user

    def valideate_email(self,field):
        if field.data != self.user.username and             User.query.filter_by(username=field.data).first():
            raise ValueError(‘用户名已在使用‘)

管理员级别的资料编辑路由

@main.route(‘/edit-profile/<int:id>‘,methods=[‘GET‘,‘POST‘])
@login_required
@admin_required
def edit_profile_admin(id):
    user = User.query.get_or_404(id)
    form = EditProfieAdminForm(user=user)
    if form.validate_on_submit():
        user.email = form.email.data
        user.username = form.username.data
        user.confirmed = form.confirmed.data
        user.role = Role.query.get(form.role.data)
        user.name = form.name.data
        user.location = form.location.data
        user.about_me = form.about_me.data
        db.session.add(user)
        db.session.commit()
        flash(u‘更新成功‘)
        return redirect(url_for(‘.user‘,username=user.username))
    form.email.data = user.email
    form.username.data = user.username
    form.confirmed.data = user.confirmed
    form.role.data = user.role_id
    form.name.data = user.name
    form.location.data = user.location
    form.about_me.data = user.about_me
    return render_template(‘edit_profile.html‘,form=form,user=user)

管理员使用的资料编辑链接

{% if current_user.is_administrator() %}
    {% if user == current_user %}
    <a class="btn btn-danger" href="{{ url_for(‘.edit_profile_admin‘,id=user.id) }}">Edit</a>
    {% endif %}

时间: 2024-11-02 18:03:02

flask-用户资料的相关文章

Flask Web 开发 用户资料_3

继续上一章节,上一章节讲的是用户编辑自己页面的内容,内容也是相对简单,真实姓名,来自哪里,自我介绍的信息,而email和用户名什么的,你自己也没地方改,因为在注册的时候就登记了. 但是作为网站管理者,你肯定需要拥有权限可以修改用户的资料,甚至说是为他们修改email的地址,或者是用户名,还有权限 别看只是多做一个修改他人用户信息的表单,这个章节里面有几个知识点需要特别注意 进入正题,既然可以修改的内容多了,那么我们肯定要新建一个表单,作为ADMIN可以看到并修改的表单 class EditPro

eBay1亿4千万用户资料恐外泄!五个问题请教 eBay…

这几天的大新闻eBay用户帐密数据库遭黑客攻击1亿4千万用户个资恐泄漏,eBay于5月21日在官方博客紧急发布公告坦言:"该数据库在二月底和三月初受到攻击,范围包括 eBay的客户姓名.密码.电子邮件地址.实际地址.电话号码和出生日期"这些用户数据都有可能泄漏,报导推测此次事件恐怕超过了去年12月美国第二大连锁商店Target遭黑客攻击所影响的1.1亿客户,eBay遭黑客攻击事件将成为美国史上最大一宗资料外泄事件. 如果你正在制作高知名度的数据外泄事件列表,你现在有个新名字可以加进列表

【Android应用开发详解】实现第三方授权登录、分享以及获取用户资料

由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,博主只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一个组件,目前支持如QQ.微信.新浪微博.腾讯微博.开心网.人人网.豆瓣.网易微博.搜狐微博.facebook.twitter.googl

iOS微博项目(六)实现左滑,大图,用户资料页

1.左滑返回到nav的第一页 2.大图模式 3.登陆刷新tableview 4. 用户资料页 有时候为什么连线连不起呢,是因为file owner的class没有选择对应的类 4.1 微博接口升级后,不能看到关注数粉丝数,指定用户的微博等了. 4.2 点击@用户名进入资料页 4.3 点击头像进入资料页,只加了首页,没加正文

【Qt5开发及实例】7、综合:修改用户资料

给个目标实现以下: 代码展示, 首先创建一个项目,不要界面,选择基类是QDialog这个,后面名字的话随便改改 我的类名是:Content. baseinfo.h #include <QDialog> #include <QLabel> #include <QLineEdit> #include <QComboBox> //多选行 #include <QTextEdit> #include <QGridLayout> //网格布局 #

PHP实现的注册,登录及查询用户资料功能API接口示例

这篇文章主要介绍了PHP实现的注册,登录及查询用户资料功能API接口,结合具体实例形式分析了php服务器端用户注册.登陆.查询及curl登陆查询功能实现技巧,需要的朋友可以参考下 本文实例讲述了PHP实现的注册,登录及查询用户资料功能API接口.分享给大家供大家参考,具体如下: 服务端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 3

解决Discuz“完善用户资料”任务不能完成的问题

最近用 Discuz X3.2 搭建了个论坛,在测试过程中发现"完善用户资料"这个官方自带的任务有个Bug,将所有的资料都填写完成后,任务仍然无法完成,而且没有明确提示有哪些项目没有填写. 到官方论坛去寻求解决方案,没有找到一个明确的答复,很多人遇到这样的问题,或者标明了已解决却没有提供解决方案,结合度娘给出的一些知识,最终自己摸索出了两种方法. 方案一: "后台→用户→用户栏目→栏目列表"中将真实姓名选中,并选中在资料页中显示: "后台→用户→用户栏目→

鼠标划过用户名时在鼠标右下角显示div展示用户资料

最近做一个网站论坛,为了方便会员之间相互了解,又不想再做一个页面展示用户资料,就想到了鼠标划过用户名时在鼠标右下角显示div展示用户资料这个效果, 这里要注意的该方法不是给每个用户名的旁边都绑定一个div,当鼠标经过用户名时显示,鼠标离开时隐藏,如果这样做网页加载就太耗时将了.但以前没做过,于是便想实现这个功能.经过一天的学习和查阅,了解了个大概,最终实现了这个效果.下面列一下难点和实现方法: 一.难点 难点无非就三大块,一个是div的定位,这个是该效果的主要难点,之前在网上找了很多定位的代码,

【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,博主只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一

MVC5 网站开发之七 用户功能 2 .1用户资料的修改和删除

这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了.主要用到两个action “Modify”和“Delete”. 目录 MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网站开发之五 展示层架构 MVC5 网站开发之六 管理员 1.登录.验证和注销 MVC5 网站开发之六 管理员 2.添加.删