登录注册(无封装)flask

该博客介绍了如何使用Flask框架和JSON Web Token(JWT)来实现用户登录注册功能,包括参数接收、验证码校验、数据库操作以及登录状态的强制检查。同时展示了SQL语句在登录注册过程中的应用,详细阐述了登录注册的逻辑流程以及强制登录的实现方法。
摘要由CSDN通过智能技术生成

实现登录和注册,sql语句进行登录注册

1.登录注册思路

1.接收参数
2.校验参数
3.校验验证码
4.逻辑,增删改查
5.返回响应

2.强制登录的思路

1.定义函数login(func)和warpper函数
2.定义钩子函数获取g.uid
3.对数据进行返回

1.1代码实现

# 1.创建视图函数
class LoginView(Resource):
	def post(self):
		# 接收参数
		 req=reqparse.RequestParser() # 实例化数据
		 req.add_argument('phone',required=True)
         req.add_argument('code',required=True)

		# 校验参数
		args=req.parse_args()
		# 1.校验验证码
		red=redis.Redis(host='1270.0.0.1')
		red_byte=red.get('sms_%s'%args['phone'])
		if not red_bute:
			return jsonify({
				'code':400,
				'msg':'验证码过期'
			})
		code_str=red_byte.decode()
		if code_str!=args['code']:
			return jsonofy({
				'code':400,
				'msg':'验证码已经过期'
			})
	# 逻辑增删改查
	user=User.query.filter(User.phone==args['phone']).first()
	if not user:
		u=User(
			phone=args['phone']
		)
		db.session.add(u)
		db.session.commit()
	user=User.query.filter(User.phone==args['phone']).first()
	serect_key=current_app.config.get('加密')
	token=jwt.encode({
		'uid':user.uid,
		'phone':user.phone
		},serect_key)
	return jsonify({
		'code':200,
		'msg':'登录成功',
		'data':{
			'token':token
		}
		
		})	

对接的前端页面

在获取验证码的地方绑定事件进行验证码校验

在获取登录按钮的时候进行的保存token登录

请添加图片描述

强制登录代码实现

@定义的db.before_request
def gz():
	   req=reqparse.RequestParser() # 实例化数据
	   req.add_argiment('token',default='',localhost='HS256')
	   arsg=req.parse_args()
	   jwt_token=args['token']
	   secret_key=current_app.config.get('SECRET_KEY')
	   try:
	   		payload=jwt.decode(jwt_token,secret_key,algorithms='HS256')
			g.uid=payload['uid']
		except Exception as e:
			print(e)
			g.uid=0
		
def login(func): # 是一个闭包函数
	def warpper(*args,**kwargs):
		uid=g.uid
		if uid==0:
			return jsonify({
				'code':400,
				'msg':'用户未登录'
				
			})
	return func(*args,**kwargs)
return warpper

根据强制登录进行的数据获取

class HomeView(Resource):
def get(self):
uid=g.uid

		user_info=User.query.filter(user.uid==uid).first()
		return jsonify({
			'uid':user_info.uid,
			'phone':user_info.phone
		})

采用sql语句进行登录

导包
from flask_restful import request,reqparse
from flask import Blueprint,jsonify
import redis,json,re
import random
from utils.myjwt import MyJwt
from db import db
具体代码实现
@user_db.route("/login",methods=["POST"])
def login():
    if request.method=="POST":
        # 获取所有的数据
        req = reqparse.RequestParser()
        # 从数据库获取字段
        req.add_argument('phone')# 获取用户表的密码
        req.add_argument('password')# 获取用户表的手机号
        req.add_argument('id')# 获取用户表的手机号
        # id = int(data['id'])  # 获取用户表的ID
        args=req.parse_args()
        # 判断是否存在用户
        if not args['phone']:
            return jsonify({
                "code":401,
                "mag":"手机号不存在"
            })
        # 查询数据库中是否存在用户
        pho="select phone from user where phone='%s'"% args['phone']
        res=db.find(pho)  # 获取所有用户表中的数据
        # 存在则执行登录操作否则进行注册操作
        print(222)
        if not res:
           # 注册操作
           # 创建手机号和密码
            print(3333)
            # sql="insert into user(password,phone) values(%s,%s)"% args['password'],args['phone']
            sql = "insert into user(phone,password) values (%s,%s)" %(args['phone'],args['password'])

            print(4444)
            db.update(sql)# 创建
            db.commit()# 提交
            return jsonify({
                "code":200,
                "msg":"注册成功"
            })
        #  登录操作
        else:
            # 查询数据库中是否包含数据
            pho = "select phone from user where phone='%s'" %  args['phone']
            res=db.find(pho)
            if res:
                # 生成token
                token=MyJwt().jwt_encode({
                    'phone': args['phone']
                })
                return jsonify({
                    "code":200,
                    "msg":"登录成功",
                    "token":token
                })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值