1.配置main.py
from flask import Flask
# 初始化flask
def create_app():
app = Flask(__name__)
with app.app_context():
pass
return app
app = create_app()
# 注册微博蓝图
from views.weibo import bp_users
app.register_blueprint(bp_users,url_prefix='/users/')
#解决跨域
from flask_cors import CORS
CORS(app)
# 解决中文乱码
app.config['JSON_AS_ASCII']=False
# 导入微博配置
app.config['SECRET_KEY'] = '123123wadaws'
# 下面是SMTP服务器配置
app.config['MAIL_SERVER'] = 'smtp.163.com' # 电子邮件服务器的主机名或IP地址
app.config['MAIL_PORT'] = '25' # 电子邮件服务器的端口
app.config['MAIL_USE_TLS'] = True # 启用传输层安全
app.config['MAIL_USERNAME'] = 'Jch_676139664@163.com' # os.environ.get('MAIL_USERNAME') #邮件账户用户名
app.config['MAIL_PASSWORD'] = 'XXOWYMNBUMGHEBOV' # os.environ.get('MAIL_PASSWORD') #邮件账户的密码
# 运行接口
if __name__ == "__main__":
app.run(debug=True,host='127.0.0.1',port=8000)
在文件夹下创建view 在view下创建weibo.py文件夹
weibo.py代码如下:
from flask import Flask,request,Blueprint,jsonify,redirect # flask 中跳转
import requests
import re
import json
from db import db1
from utils.jwt_c import jwte
# 加密
# 声明蓝图
bp_users = Blueprint('users',__name__)
from db import db1
@bp_users.route('/weiboCallback/',methods=['POST','GET'])
def weiboCallback():
# 获取code
code = request.args.get("code")
# print(code)
# 微博认证地址
access_token_url = "https://api.weibo.com/oauth2/access_token"
# 参数
response = requests.post(access_token_url, data={
"client_id": '3648830690',
"client_secret": "916d80b477ccffce5d70e63b02bb1092",
"grant_type": "authorization_code",
"code": code,
"redirect_uri": "http://127.0.0.1:8000/users/weiboCallback/",
})
res = eval(str(response.text))
try:
uid = res['uid']
token = res['access_token']
except Exception as e:
uid = 0
return redirect('http://localhost:8888/error/')
# 通过uid去三方登录表查询数据量
sql = "select u.nikename,u.id,u.email from sf_login as sf inner join users as u on sf.user_id=u.id where sf.uid=%d"%(int(uid))
res = db1.find(sql)
if res:
# 找到生成token返回
token1 = jwte.j_encode({"data":{'id':res['id'],'email':res['email']}})
return redirect('http://localhost:8888/bandMobile/?type=1&id='+str(res['id'])+'&email='+res['email']+'&token='+token1)
# return redirect("http://localhost:8888/?id="+res['id']+'&nikename='+res['nikename']+'&email='+res['email'])
else:
# 不存在绑定用户操作 redirect 跳转到vue页面,将uid token 携带 来自那微博还是微信还是qq
return redirect('http://localhost:8888/bandMobile/?type=2&uid=' + uid + '&token=' + token)
@bp_users.route('/bainMobile/',methods=['POST'])
def bainMobile():
# 在vue页面上显示一个输入框 绑定手机号
data = request.data
if data:
data = json.loads(data)
else:
data = request.form
print(data)
# 先用mobile去用户表生成信息
sql = "select id from users where email='%s'"%(data['email'])
email = db1.find(sql)
if email:
return jsonify({"code":403,'msg':'邮箱存在,不可绑定'})
else:
# 三方登录添加信息
try:
# sql = "insert into users(email) values ('%s')"%(data['email'])
sql = "insert into users(email) values ('%s')" %(data['email'])
db1.update(sql)
except :
return jsonify({"code":10050,'msg':'用户添加失败'})
# 查询id
sql1 = "select id,email from users where email = '%s'"%(data['email'])
user = db1.find(sql1)
# 三方登录表
try:
sql2 = "insert into sf_login(user_id,platfrom,uid,token) values(%d,'weibo','%s','%s')"%(int(user['id']),data['uid'],data['token'])
db1.update(sql2)
sql3 = "update users set status=1 where email='%s'" %(data['email'])
db1.update(sql3)
token1 = jwte.j_encode({"data": {'id': user['id'], 'email': user['email'],}})
return jsonify({'code':200,'id':user['id'],'email':user['email'],'token':token1})
except :
return jsonify({'code':403,'msg':'添加三方失败'})
前端
//跳转地址
<a :href="weibo_url"><i class="fa fa-weibo"></i></a>
// 点击获取后端的url 并且传入前端赋值weibo_url
<a @click="oauth"><i class="fa fa-weibo"></i></a>
<script>
export default {
data(){
return{
weibo_url:''
}
}
methods:{
oauth() {
let url = "https://api.weibo.com/oauth2/authorize?client_id=3648830690&response_type=code&redirect_uri=http://127.0.0.1:8000/users/weiboCallback/"
this.weibo_url = url;
// 从后端获取 微博登录地址
// oauth_post().then((resp) => {
// console.log(resp)
// //{'code': '0', 'msg': '成功', 'data': {'url': url}}
// let url = "https://api.weibo.com/oauth2/authorize?client_id=3648830690&response_type=code&redirect_uri=http://127.0.0.1:8000/users/weiboCallback/"
// this.weibo_url = url;
// })
},
}
}
</script>