上一篇除了环境须要本身搭建须要点时间外,先后端服务的初始化例子应该在10分钟就差不能搞定,下边继续,看下先后端联动,实现用户登陆。html
这里直接贴出做者给的结构目录,其中咱们这篇要重点关注api和views前端
├── build // 构建相关 ├── mock // 项目mock 模拟数据 ├── public // 公共资源 ├── src // 源代码 │ ├── api // 全部接口请求 │ ├── assets // 主题 字体等静态资源 │ ├── components // 全局公用组件 │ ├── directive // 全局指令 │ ├── filtres // 全局 filter │ ├── icons // 项目全部 svg icons │ ├── router // 路由 │ ├── store // 全局 store管理 │ ├── styles // 全局样式 │ ├── utils // 全局公用方法 │ ├── vendor // 公用vendor │ ├── views // view │ ├── App.vue // 入口页面 │ ├── main.js // 入口 加载组件 初始化等 │ └── permission.js // 权限管理
api :请求服务端接口的配置都在这里,这里逻辑实现是用到了utils里边的封装的request.js,其中在没有正式服务接口的以前是能够直接调用上边mock里的地址,获得模拟的数据请求。vue
views:页面的布局,样式,功能实现的地方,通常一个vue表明一个功能页面,具体根据自身项目逻辑划分就能够。python
终端切换到vue-element-admin目录,执行npm run dev 编译并开发者模式运行。chrome
用chrome打开,进入登陆页面,并依次浏览器菜单-更多工具-开发者工具,进入调试模式,切换到查看网络,来查看在登陆网络请求npm
输入admin,任意密码,点击Login,正常进入主页后咱们会分别看到两个登陆相关接口login 和 info,请求Request URL分别为:json
1. http://localhost:9527/dev-api/vue-element-admin/user/login 方法postflask
对应返回如图vim
2.http://localhost:9527/dev-api/vue-element-admin/user/info?token=admin-token 方法get对应返回如图后端
其实这个若是在/mock/user.js也能经过代码看到,登陆接口的内容。
既然已经知道登陆接口的请求以及重要的返回值,那么咱们就能够用flask实现这两个接口,一个是登陆验证用户存在返回token,另外一个是登陆成功后获取用户信息。
[POST] /user/login
1. 编写代码:vim run.py 或者你顺手的编辑器
# -*- coding: utf-8 -*- from flask import Flask from flask import request import json app = Flask(__name__) @app.route("/api/hello") def hello(): return "Hello, World!" @app.route("/api/user/login",methods=['POST']) def login(): data = request.get_data() # 获取post请求body数据 js_data = json.loads(data) # 将字符串转成json # 验证若是是admin用户名,即登陆成功,返回admin的token,不然验证失败 if 'username' in js_data and js_data['username'] == 'admin': result_success = {"code":20000,"data":{"token":"admin-token"}} return result_success else: result_error = {"code":60204,"message":"帐号密码错误"} return result_error if __name__ == "__main__": app.run(debug = True)
2. 测试:运行python run.py 经过后 curl 或者 postman进行请求测试
1)登陆成功
curl -X POST http://127.0.0.1:5000/api/user/login -d '{"username":"admin","password":"123456"}'
2) 非admin登陆错误
curl -X POST http://127.0.0.1:5000/api/user/login -d '{"username":"root","password":"654321"}'
[GET] /user/info
1. 继续追加实现代码
@app.route("/api/user/info",methods=['GET']) def info(): # 获取GET中请求token参数值 token = request.args.get('token') if token == 'admin-token': result_success = { "code":20000, "data":{ "roles":["admin"], "introduction":"I am a super administrator", "avatar":"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif", "name":"Super Admin"} } return result_success else: result_error = {"code": 60204, "message": "用户信息获取错误"} return result_error
2. 继续测试
curl 'http://127.0.0.1:5000/api/user/info?token=admin-token'
到此后端代码用户登陆逻辑接口实现完了,咱们能够保持后端服务运行,而后让咱们将前端的请求从mock切换成咱们本身的服务
1. 修改接口请求地址
路径 vue-element-admin/src/api/user.js ,进行打开编辑, 配置成本身写的请求的api地址( 注释掉的就是原来mock地址)
export function login(data) { return request({ // url: '/vue-element-admin/user/login', url: '/api/user/login', method: 'post', data }) } export function getInfo(token) { return request({ // url: '/vue-element-admin/user/info', url: '/api/user/info', method: 'get', params: { token } }) }
2. 修改一个请求域名
另外还须要修改一下默认的域名地址,文件位于根目录.env.development 里边一项改为,这里只暂时dev配置环境的。
VUE_APP_BASE_API = 'http://127.0.0.1:5000/'
3. 运行测试
从新启动运行前端,尝试登陆,查看登陆状态和chrome调试模式的请求返回,你会发现并无成功,看flask日志输出显示相似 "OPTIONS /api/user/login HTTP/1.1" 200 提示,这是因为跨域问题,简单说就是浏览器一种安全机制,至于详细的后续单独再说,这里先一个通用解决办法就是在python flask中容许跨域就行了。
1. 安装python依赖包flask-cors
pip install flask-cors
2. 头部引用
flask_cors *
3. 容许代码
app = Flask(__name__) CORS(app, supports_credentials=True)
最终联调
从新运行后端服务 python run.py
从新运行前端服务 npm run dev
输入 amdin / 123456 进行登陆
OK 先后端联调成功
** 前篇阅读推荐 **