一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

vue.js+flask+element

 黃金屋1 2019-05-18

氣勢(shì)的信心

氣勢(shì)的信心

計(jì)算機(jī)/健身愛(ài)好者

10 人贊了該文章

最近工作中用到Vue.js加上一直在用的Flask,所以準(zhǔn)備寫個(gè)小小的demo鞏固下。

ps:之前一直用unpkg的各種包,發(fā)現(xiàn)會(huì)出問(wèn)題,所以demo中將所有需要用到的js包放在本地當(dāng)中。

項(xiàng)目使用到Flask+flask_jsglue+vue.js+element-ui+data-table.js+axios.js

demo很簡(jiǎn)單,最基本的flask應(yīng)用加上幾個(gè)api方法

index.py:

  1. app = Flask(__name__)
  2. jsglue = JSGlue()
  3. jsglue.init_app(app) # 讓js文件中可以使用url_for方法
  4. @app.route('/')
  5. def index():
  6. return render_template('index.html')
  7. @app.route('/get_data')
  8. def get_base_data():
  9. return jsonify({'results': results})
  10. @app.route('/add', methods=['POST'])
  11. def add():
  12. name = request.json.get('name')
  13. results.append({'name': name, 'index': str(uuid1())})#uuid讓index不唯一,實(shí)際開(kāi)發(fā)中可以通過(guò)數(shù)據(jù)庫(kù)的id來(lái)代替
  14. return jsonify({'message': '添加成功!'}), 200
  15. @app.route('/update', methods=['PUT'])
  16. def update():
  17. name = request.json.get('name')
  18. index = request.json.get('index')
  19. for item in results:
  20. if item['index'] == index:
  21. item['name'] = name
  22. break
  23. return jsonify({'message': '編輯成功!'}), 200
  24. @app.route('/delete', methods=['DELETE'])
  25. def delete():
  26. name = request.args.get('name')
  27. index = request.args.get('index')
  28. results.remove({'name': name, 'index': index})
  29. return jsonify({'message': '刪除成功!'}), 200
  30. if __name__ == '__main__':
  31. app.run(debug=True)

template

  1. <script type="text/x-template" id="tabel-detail-template">
  2. <div>
  3. <data-tables :data='tableData' :actions-def="getActionsDef()"
  4. :pagination-def="getPaginationDef()"
  5. :row-action-def="getRowActionsDef()"
  6. action-col-width="80">
  7. <el-table-column label="關(guān)鍵詞" min-width="400">
  8. <template scope="scope">
  9. <a :href="scope.row.url" target="_blank" v-text="scope.row.name"></a>
  10. </template>
  11. </el-table-column>
  12. </data-tables>
  13. <el-dialog :title="formTitle" :visible.sync="dialogFormVisible">
  14. <el-form :model="form" @submit.native.prevent>
  15. <el-form-item label="數(shù)據(jù)">
  16. <el-input ref="valueInput" v-model.trim="form.name" auto-complete="off"
  17. @keyup.enter.native="createOrUpdate"></el-input>
  18. </el-form-item>
  19. </el-form>
  20. <div slot="footer" class="dialog-footer">
  21. <el-button @click="dialogFormVisible = false">取 消</el-button>
  22. <el-button type="primary" @click="createOrUpdate">確 定</el-button>
  23. </div>
  24. </el-dialog>
  25. </div>
  26. </script>

index.js

  1. getActionsDef: function () {
  2. let self = this;
  3. return {
  4. width: 5,
  5. def: [{
  6. name: '添加數(shù)據(jù)',
  7. handler() {
  8. self.formType = 'create';
  9. self.formTitle = '添加數(shù)據(jù)';
  10. self.form.name = '';
  11. self.form.index = '';
  12. self.dialogFormVisible = true;
  13. },
  14. icon: 'plus'
  15. }]
  16. }
  17. },
  18. getPaginationDef: function () {
  19. return {
  20. pageSize: 10,
  21. pageSizes: [10, 20, 50]
  22. }
  23. },
  24. getRowActionsDef: function () {
  25. let self = this;
  26. return [{
  27. type: 'primary',
  28. handler(row) {
  29. self.formType = 'edit';
  30. self.form.name = row.name;
  31. self.form.index = row.index;
  32. self.formTitle = '編輯數(shù)據(jù)';
  33. self.dialogFormVisible = true;
  34. },
  35. name: '編輯'
  36. }, {
  37. type: 'danger',
  38. handler(row) {
  39. if (row.flag === 'true') {
  40. self.$message.success("該信息不能刪除!")
  41. } else {
  42. self.$confirm('確認(rèn)刪除該數(shù)據(jù)?', '提示', {
  43. confirmButtonText: '確定',
  44. cancelButtonText: '取消',
  45. type: 'warning'
  46. }).then(function () {
  47. let url = Flask.url_for("delete", {name: row.name, index: row.index});
  48. axios.delete(url).then(function (response) {
  49. self.getCategories();
  50. self.$message.success("刪除成功!")
  51. }).catch(self.showError)
  52. });
  53. }
  54. },
  55. name: '刪除'
  56. }]
  57. },
  58. getCategories: function () {
  59. let url = Flask.url_for("get_base_data");
  60. let self = this;
  61. axios.get(url).then(function (response) {
  62. self.tableData = response.data.results;
  63. });
  64. },
  65. createOrUpdate: function () {
  66. let self = this;
  67. if (self.form.name === '') {
  68. self.$message.error('數(shù)據(jù)不能為空!');
  69. return
  70. }
  71. if (self.formType === 'create') {
  72. let url = Flask.url_for("add");
  73. axios.post(url, {
  74. name: self.form.name
  75. }).then(function (response) {
  76. self.getCategories();
  77. self.dialogFormVisible = false;
  78. self.$message.success('添加成功!')
  79. }).catch(self.showError);
  80. } else {
  81. let url = Flask.url_for("update", {});
  82. axios.put(url, {
  83. name: self.form.name,
  84. index: self.form.index
  85. }).then(function (response) {
  86. self.getCategories();
  87. self.dialogFormVisible = false;
  88. self.$message.success('修改成功!')
  89. }).catch(self.showError);
  90. }
  91. }
  92. }

因?yàn)閐emo比較簡(jiǎn)單,數(shù)據(jù)存在內(nèi)存中,僅僅用于展示,讀者可自行結(jié)合數(shù)據(jù)庫(kù)

代碼請(qǐng)戳github

發(fā)布于 2017-09-18

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲精品深夜福利视频| 欧美日韩校园春色激情偷拍| 日本免费一本一二区三区| 三级理论午夜福利在线看| 日韩欧美三级中文字幕| 伊人久久五月天综合网| 国产成人亚洲精品青草天美| 日本高清视频在线观看不卡| 大香伊蕉欧美一区二区三区| 99久免费精品视频在线观| 日本一品道在线免费观看| 亚洲国产婷婷六月丁香| 亚洲夫妻性生活免费视频| av在线免费观看一区二区三区 | 久草精品视频精品视频精品 | 日韩熟妇人妻一区二区三区| 欧美一区二区黑人在线| 男女午夜福利院在线观看| 亚洲精品福利视频你懂的| 午夜精品成年人免费视频| 欧美日韩精品一区二区三区不卡 | 超薄丝袜足一区二区三区| 亚洲欧美黑人一区二区| 亚洲国产精品国自产拍社区| 亚洲国产一级片在线观看| 精品人妻一区二区三区四区久久| 国产三级欧美三级日韩三级| 精品少妇人妻av免费看| 麻豆一区二区三区精品视频| 99香蕉精品视频国产版| 女人高潮被爽到呻吟在线观看| 欧美激情区一区二区三区| 日本淫片一区二区三区| 91福利视频日本免费看看| 国产在线日韩精品欧美| 亚洲一区二区三区免费的视频| 国产欧美日产中文一区| 粉嫩一区二区三区粉嫩视频| 国产又爽又猛又粗又色对黄| 日本不卡一本二本三区| 91亚洲人人在字幕国产|