flask 사용자 로그 인 모듈 + 사용자 프로필 사진 설정 (간단 한 코드 논리)

9849 단어 Flask
도 법 이 무상 하 니 일 하 는 방식 과 방법 도 변 하지 않 을 수 없다.진정 으로 똑똑 한 사람 은 시 세 를 잘 살 피고 실제 상황 에 따라 적당 한 선택 을 한다.
사용자 로그 인, 패턴 이 다양 합 니 다. 그 중의 핵심 코드 논 리 를 파악 하기 만 하면 됩 니 다.적합 한 기능 코드 를 쓸 수 있 습 니 다.방향 이 정확 하고 길 은 같 으 며 길 은 로마 로 통한다.
다음은 참고 만 제공 합 니 다. 도 무상 도, 법 무상 법, 세 무정 세, 물 무상 형, 군 자 는 시 세 를 잘 살 펴 보면 그 법 을 얻 을 수 있 습 니 다.
사용자 로그 인 모듈
사용자 로그 인
 1.     ,get_json()
 2.       
 3.   json          ,mobile  password
 4.         
 5.        
 6.      ,       ,      
 7.      :               check_password_hash()
 8.       :(        )
 session['name'] = mobile    
 session['name'] = user.name
 9.       

코드
# coding=utf-8
#       
from . import api
#   flask     
from flask import request,jsonify,current_app,session,g
#          
from ihome.utils.response_code import RET
#      
from ihome.models import User
#          
from ihome.utils.commons import login_required
#        
from ihome import db,constants
#      
from ihome.utils.image_storage import storage

#       
import re

@api.route('/sessions',methods=['POST'])
def login():
    #     post  
    user_data = request.get_json()
    #        
    if not user_data:
        return jsonify(errno=RET.PARAMERR,errmsg='    ')
    #          ,mobile,password
    mobile = user_data.get('mobile')
    password = user_data.get('password')
    #         
    if not all([mobile,password]):
        return jsonify(errno=RET.PARAMERR,errmsg='     ')
    #        
    if not re.match(r'1[3456789]\d{9}',mobile):
        return jsonify(errno=RET.PARAMERR,errmsg='       ')
    #      ,       ,      
    try:
        user = User.query.filter_by(mobile=mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg='       ')
    #       ,       /      
    if user is None or not user.check_password(password):
        return jsonify(errno=RET.DATAERR,errmsg='        ')
    #       
    """
             :
    def login_required():
        user_id = session.get('user_id')
        if user_id:
            g.user_id = user_id
        else:
            return jsonify(errno=RET.SESSIONERR,errmsg='     ')

    """
    session['user_id'] = user.id
    session['mobile'] = mobile
    #             ,           
    session['name'] = user.name
    #     
    return jsonify(errno=RET.OK,errmsg='OK',data={'user_id':user.id})

사용자 정보 가 져 오기
 1.       user_id = g.user_id
 2.            
       :user = User.query.get(user_id)
       :user = User.query.filter_by(id=user_id).first()
 3.       
 4.     ,        to_dict()  

코드
@api.route('/user',methods=['GET'])
@login_required
def get_user_profile():
    #     id
    user_id = g.user_id
    #   mysql   
    try:
        user = User.query.filter_by(id=user_id).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg='       ')
    #       
    if not user:
        return jsonify(errno=RET.NODATA,errmsg='      ')
    #     
    return jsonify(errno=RET.OK,errmsg='OK',data=user.to_dict())

사용자 프로필 사진 설정
1.       
2.     ,          request.files.get()
3.            ()
4.        ,      
5.        ,                
6.       ,          
7.          
8.     

코드
@api.route('/user/avatar',methods=['POST'])
@login_required
def set_user_avatar():
    #     id
    user_id = g.user_id
    #              
    avatar = request.files.get('avatar')
    #       ,         bytes  
    avatar_data = avatar.read()
    #      ,      
    try:
        image_name = storage(avatar_data)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.THIRDERR,errmsg='      ')
    #          mysql    
    # db.session.add(user)
    #     update            
    try:
        # update()
        User.query.filter_by(id=user_id).update({'avatar_url':image_name})
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR,errmsg='        ')
    #          
    image_url = constants.QINIU_DOMIN_PREFIX + image_name
    #     
    return jsonify(errno=RET.OK,errmsg='OK',data={"avatar_url":image_url})

좋은 웹페이지 즐겨찾기