当前位置:   article > 正文

flask-vue-sqlite3-->api接口---项目使用--推荐_flask sqlite3

flask sqlite3

项目简要说明:

本项目采用flask,vue2,axios,sqlite3实现一个前后端分离【api接口】,获取后端的资源的小示例:

项目目录结构:


一数据信息准备:

1.准备数据库:字段以及插入的数据信息

sql插入数据库的语句:

insert into books(title,author,price) values('中国历史','中国人',99.99),('java','tom',199.99),('golang','地鼠先生',89.99),('python','jerry',100.99)


二.flask后台代码:

  1. from flask import Flask
  2. from flask import jsonify,render_template
  3. import sqlite3
  4. app=Flask(__name__)
  5. # sqlite3 row_factory ,python推出了Cursor.Row对象。其实就是列名和值做了个映射,可以通过字符索引来获取值。很方便
  6. # conn.row_factory = sqlite3.Row
  7. @app.route("/api/books")
  8. def books():
  9. conn=sqlite3.connect("books.db")
  10. conn.row_factory=sqlite3.Row #把数据库的字段和查询的信息放在一起
  11. cur=conn.cursor()
  12. sql="select * from books"
  13. rows=cur.execute(sql).fetchall()
  14. rowsdics=[dict(row) for row in rows]
  15. return jsonify(rowsdics)
  16. @app.route("/")
  17. def home():
  18. return render_template("index.html",title="ht API")
  19. if __name__ == '__main__':
  20. app.run()

初步数据验证,也就是"/api/books",测试是否可以获取到数据库的信息



三.前端代码的编写

这里选择的是调取离线的vue-js,axios离线的版本实现的调取

关注:离线调取的方式  url-for事项

<script src="{{url_for('static',filename='vuev2.6.14.js')}}"></script>

 前端全部代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Flask API</title>
  6. <!-- 1.调用本地离线版本-->
  7. <script src="{{url_for('static',filename='vuev2.6.14.js')}}"></script>
  8. <!-- <script src="{{url_for('static',filename='vue-resource1.5.1.min.js')}}"></script>-->
  9. <script src="{{url_for('static',filename='axios0.27.2.min.js')}}"></script>
  10. <!--2.调用cdn方式,前提必须联网-->
  11. <!-- cdn 版本的引用-->
  12. <!-- <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>-->
  13. <!-- <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>-->
  14. <!-- <script src="https://unpkg.com/axios/dist/axios.min.js"></script>-->
  15. </head>
  16. <body>
  17. <div id="app">
  18. <h1>Flask &api &Vuejs&{{title}}</h1>
  19. <!-- 表格信息-->
  20. <table border="1" cellpadding="5" cellspacing="5">
  21. <tr>
  22. <td>#</td>
  23. <td>标题</td>
  24. <td>作者</td>
  25. <td>定价</td>
  26. </tr>
  27. <!-- 遍历axios获取的books数据,放入表格中,这里是[[]]方括号,是避免与flask默认的的模板区分,圆括号,通过通过--vue中的delimiters:方括号,进行控制的 -->
  28. <tr v-for ="book in books">
  29. <td>[[book.id]]</td>
  30. <td>[[book.title]]</td>
  31. <td>[[book.author]]</td>
  32. <td>[[book.price]]</td>
  33. </tr>
  34. </table>
  35. </div>
  36. <script>
  37. var app=new Vue({
  38. el:"#app",
  39. data:{
  40. books:[]
  41. },
  42. //修改vue中的默认的圆括号数据修改,修改为方括号的方式
  43. delimiters:["[[","]]"],
  44. // 挂载成功后,就是调用函数fetchData
  45. mounted:function () {
  46. this.fetchData();
  47. },
  48. methods:{
  49. //#######################vue-axios方式###########################
  50. //axios的调取方式
  51. fetchData() {
  52. axios.get("http://127.0.0.1:5000/api/books")
  53. .then(respose=>(this.books=respose.data))
  54. .catch(function (error) {
  55. console.log(error)
  56. })
  57. }
  58. //#######################vue-resource1.5.1.min.js###########################
  59. //调用VUE vue-resource1.5.1.min.js方式
  60. // fetchData(){
  61. // this.$http.get("/api/books").then(rsp=>{
  62. // this.books=rsp.body
  63. // },err=>{console.log('Error')})
  64. //
  65. //
  66. // }
  67. }
  68. })
  69. </script>
  70. </body>
  71. </html>

效果展示:





后端没有改变,前端再次优化,采用“element”组件优化下界面信息,不然太难看了

 饿了么UI地址:

https://element.eleme.cn/#/zh-CN

 本次只是优化下前端界面信息:

 

 引入离线的饿了么组件

修改饿了么UI代码的重点地方:

代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Flask API</title>
  6. <!-- 1.调用本地离线版本-->
  7. <script src="{{url_for('static',filename='vuev2.6.14.js')}}"></script>
  8. <!-- <script src="{{url_for('static',filename='vue-resource1.5.1.min.js')}}"></script>-->
  9. <script src="{{url_for('static',filename='axios0.27.2.min.js')}}"></script>
  10. <!-- <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">-->
  11. <link rel="stylesheet" href="{{url_for('static',filename='elementui_index.css')}}">
  12. <script src="{{url_for('static',filename='elementui_2.15.8index.js')}}"></script>
  13. <!--2.调用cdn方式,前提必须联网-->
  14. <!-- cdn 版本的引用-->
  15. <!-- <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>-->
  16. <!-- <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>-->
  17. <!-- <script src="https://unpkg.com/axios/dist/axios.min.js"></script>-->
  18. </head>
  19. <body>
  20. <div id="app">
  21. <el-tag>{{title}}</el-tag>
  22. <!-- <h1>Flask &api &Vuejs&{{title}}</h1>-->
  23. <!-- 饿了么Ui需要一个:data数据而且是一个数组里面存放对象的结构,同时关注prop这个参数,需要修改与数据库中“字段”对应-->
  24. <!-- 如我的sqlite3中有4个字段分别为 id,title ,author ,price -->
  25. <el-table
  26. :data="books"
  27. style="width: 100%">
  28. <el-table-column
  29. prop="id"
  30. label="id"
  31. width="180">
  32. </el-table-column>
  33. <el-table-column
  34. prop="title"
  35. label="标题"
  36. width="180">
  37. </el-table-column>
  38. <el-table-column
  39. prop="author"
  40. label="作者"
  41. width="180">
  42. </el-table-column>
  43. <el-table-column
  44. prop="price"
  45. label="定价">
  46. </el-table-column>
  47. </el-table>
  48. </div>
  49. <script>
  50. var app=new Vue({
  51. el:"#app",
  52. data:{
  53. books:[]
  54. },
  55. //修改vue中的默认的圆括号数据修改,修改为方括号的方式
  56. delimiters:["[[","]]"],
  57. // 挂载成功后,就是调用函数fetchData
  58. mounted:function () {
  59. this.fetchData();
  60. },
  61. methods:{
  62. //#######################vue-axios方式###########################
  63. //axios的调取方式
  64. fetchData() {
  65. axios.get("http://127.0.0.1:5000/api/books")
  66. .then(respose=>(this.books=respose.data))
  67. .catch(function (error) {
  68. console.log(error)
  69. })
  70. }
  71. //#######################vue-resource1.5.1.min.js###########################
  72. //调用VUE vue-resource1.5.1.min.js方式
  73. // fetchData(){
  74. // this.$http.get("/api/books").then(rsp=>{
  75. // this.books=rsp.body
  76. // },err=>{console.log('Error')})
  77. //
  78. //
  79. // }
  80. }
  81. })
  82. </script>
  83. </body>
  84. </html>


 展示下效果:

 比以前好看多了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/889513
推荐阅读
相关标签
  

闽ICP备14008679号