美文网首页
day62-flask项目爱家头像上传及认证

day62-flask项目爱家头像上传及认证

作者: barriers | 来源:发表于2019-02-12 20:02 被阅读0次

在flask中用函数名实现跳转的只有反向解析。其他都是由蓝图别名加路由实现跳转。而反向解析为蓝图的第一个参数加重定向的函数名实现跳转。形式为url_for('生成蓝图的第一个参数.重定向的函数名')。
在js中实现页面跳转有两种方式,location.href = '/user/my/'和(location).attr('href', '/user/my/') 在ajax中给图片等传输文件地址时,使用('#user-avatar').attr('src', data.data.avatar)

1登陆校验装饰器

def need_check(func):
    @wraps(func)
    def check_path(*args, **kwargs):
        if 'user_id' in session:
            # 判断session中是否存在登陆的标识user_id
            return func(*args, **kwargs)
        else:
            return redirect(url_for('user.my_login'))
    return check_path

登陆成功时向session中存值

3.密码校验
if user.check_pwd(passwd):
    session['user_id'] = user.id
    return jsonify({'code': 200, 'msg': '请求成功'})

2解析当前登陆用户

前后分离过程中在页面解析当前登陆用户的相关信息(不使用current_user),通过使用自定义的对象方法to_basic_dict()将对象序列化传递给前端,然后前端获取到相关标签并对其进行解析。

@user_blue.route('/user_info/', methods=['GET'])
def user_info():
    user_id = session['user_id']
    user = User.query.get(user_id)
    return jsonify({'code': 200, 'msg': '请求成功', 'data': user.to_basic_dict()})

$(document).ready(function(){
    $.ajax({
        url:'/user/user_info/',
        dataType:'json',
        type:'GET',
        success:function (data) {
            $('#user-name').html(data.data.name)
            $('#user-mobile').html(data.data.phone)
            $('#user-avatar').attr('src', '/static/media/'+data.data.avatar)
        }
    })
})

3修改头像

$(document).ready(function () {
    $('#form-avatar').submit(function (e) {
        e.preventDefault();
        $(this).ajaxSubmit({
            url:'/user/profile/',
            type:'PATCH',
            dataType:'json',
            success:function (data) {
                if(data.code == 200){
                    $('#user-avatar').attr('src', '/static/media/'+data.avatar)
                }
                if(data.code == 1009){
                    $('#avatar-err span').html(data.msg)
                    $('#avatar-err').show()
                }
            }
        })
    })

@user_blue.route('/profile/', methods=['PATCH'])
@need_check
def patch_profile():
    # 1.获取图片
    ima = request.files.get('avatar')
    if not ima:
        return jsonify({'code': 1009, 'msg': '上传图片不能为空'})
    else:
        # 2.获取项目路径
        BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        # 3.获取媒体文件的路径
        STATIC_DIR = os.path.join(BASE_DIR, 'static')
        MEDIA_DIR = os.path.join(STATIC_DIR, 'media')
        # 4.生成随机图片名称
        filename = str(uuid.uuid4())
        # 5.获取图片的后缀
        a = ima.mimetype.split('/')[-1]
        # 6.生成文件名
        name = filename + '.' + a
        # 7.拼接图片地址
        path = os.path.join(MEDIA_DIR, name)
        # 8.将图片保存到media文件夹中
        ima.save(path)
        # 9.获取用户对象
        user_id = session['user_id']
        user = User.query.filter_by(id=user_id).first()
        # 10.给用户头像赋值并保存
        user.avatar = name
        user.add_update()
        return jsonify({'code': 200, 'msg': '请求成功', 'avatar': user.avatar})

4修改姓名

$('#form-name').submit(function (e) {
    e.preventDefault();
    $(this).ajaxSubmit({
        url:'/user/my_profile/',
        type:'POST',
        dataType:'json',
        success:function (data) {
            if(data.code == 200){
                location.href = '/user/my/'
            }
            if(data.code == 1010){
                $('#name-err span').html(data.msg)
                $('#name-err').show()
            }
            if(data.code == 1011){
                $('#name-err span').html(data.msg)
                $('#name-err').show()
            }
        }
    })
})

@user_blue.route('/my_profile/', methods=['POST'])
@need_check
def my_profile():
    # 1.获取用户名
    name = request.form.get('name')
    if not name:
        return jsonify({'code': 1010, 'msg': '姓名不能为空'})
    else:
        user = User.query.filter(User.name == name).first()
        if user:
            return jsonify({'code': 1011, 'msg': '已存在该用户名,请重新输入'})
        else:
            user_id = session['user_id']
            user = User.query.get(user_id)
            user.name = name
            user.add_update()
            return jsonify({'code': 200, 'msg': '修改成功'})

5实名认证

$(document).ready(function () {
    $('#form-auth').submit(function (e) {
        e.preventDefault();
        $(this).ajaxSubmit({
            url:'/user/auth/',
            dataType:'json',
            type:'POST',
            success:function (data) {
                if(data.code == 200){
                   location.href = '/user/my/'
               }
               if(data.code == 2000){
                   $('.error-msg span').html(data.msg)
                   $('.error-msg').show()
               }
               if(data.code == 2001){
                   $('.error-msg span').html(data.msg)
                   $('.error-msg').show()
               }
               if(data.code == 2002){
                   $('.error-msg span').html(data.msg)
                   $('.error-msg').show()
               }
               if(data.code == 2003){
                   $('.error-msg span').html(data.msg)
                   $('.error-msg').show()
               }
            }
        })
    })
})

@user_blue.route('/auth/', methods=['POST'])
@need_check
def my_auth():
    # 1.获取用户名和身份证号
    real_name = request.form.get('real_name')
    id_card = request.form.get('id_card')
    # 2.判断用户名及身份证是否填写完全
    if not (2 <= len(real_name) <= 4 or len(id_card) == 18):
        return jsonify({'code': 2000, 'msg': '请填写合法的用户名(2至4个字符)或身份证号(18个字符)'})
    else:
        if re.search(r'[^\u4e00-\u9fa5]', real_name):
            return jsonify({'code': 2001, 'msg': '姓名中包含不合法的字符(请全部使用汉字)'})
        if not re.fullmatch(r'^\d{17}[xX\d]$', id_card):
            return jsonify({'code': 2002, 'msg': '身份证号不合法'})
        # 3.查询该身份证号是否已被用于实名认证过
        user = User.query.filter_by(id_card=id_card).first()
        if user:
            return jsonify({'code': 2003, 'msg': '该身份证号已被实名认证'})
        # 4.保存实名认证信息
        user_id = session['user_id']
        user = User.query.get(user_id)
        user.id_name = real_name
        user.id_card = id_card
        user.add_update()
        return jsonify({'code': 200, 'msg': '实名认证成功'})

6退出

@user_blue.route('/logout/', methods=['GET'])
def logout():
    del session['user_id']
    return jsonify({'code': 200, 'msg': '请求成功', 'errno': 0})

function logout() {
    $.get("/user/logout", function(data){
        if (0 == data.errno) {
            location.href = "/user/my_login/";
        }
    })
}

相关文章

  • day62-flask项目爱家头像上传及认证

    在flask中用函数名实现跳转的只有反向解析。其他都是由蓝图别名加路由实现跳转。而反向解析为蓝图的第一个参数加重定...

  • .net web core 如何编码实现文件上传功能

    前言 在进行Web前后端分析开始时,我们经常会碰到文件上传的需求。上传用户头像,上传认证材料、审核材料等,这些都可...

  • 上传图片接口

    项目中经常会遇到上传图片和头像 记录下接口 上传头像逻辑:每个账号都只有一个头像 所以这里将每个账号的头像名称设...

  • Alamofire (4.7.3)带参数上传图片

    最近在做新项目,要用到头像上传,相起来很久很久之前做过一个项目,其中就有上传头像接口,尝试着看看能不能使用。 老项...

  • 【php增删改查实例】第二十四节 - 文件上传在项目中的具体应用

    文件上传在项目中,一般有两个用武之地,分别为设置用户的头像和上传附件。本节我们演示如果进行用户头像的上传。 因为一...

  • Android 中 Fragment的OnActivityRes

    今天项目中有个上传头像的问题,是h5调用我的代码来上传头像,在Fragment总调用,返回之后,没有反映,开始我以...

  • Android使用Retrofit上传图片到服务器

    上传头像的问题 8月份的时候曾经在项目中遇到要上传图片到服务器的问题,其实需求很典型:就是用户需要上传自己的头像。...

  • 前端上传实现

    项目中涉及到的上传项目中涉及到需要上传文件的需求很多,简单的有上传用户头像,复杂一些的有文件管理系统中的文件上传,...

  • 智慧认证云平台使用手册

    智慧认证云平台使用手册 智慧认证云平台是为智慧认证系统服务器提供头像及识别人脸图像采集的客户端。用户需要在智慧认证...

  • SdwebImage 加载URL图片 时缓存问题解决方案

    最近旧项目,突然出现用户修改头像后,头像没有变化的问题,梳理了代码逻辑,发现,每次上传头像至阿里云后,阿里云返回的...

网友评论

      本文标题:day62-flask项目爱家头像上传及认证

      本文链接:https://www.haomeiwen.com/subject/xgzkeqtx.html