時間:2023-07-21 01:27:02 | 來源:網(wǎng)站運營
時間:2023-07-21 01:27:02 來源:網(wǎng)站運營
【實戰(zhàn)】Django + VueJS 打造內(nèi)網(wǎng) Postman:就和你們看到 內(nèi)網(wǎng)Postman 是懵逼的一樣,我接到一個叫非標操作的需求時候我也是懵逼的
故事純屬虛構(gòu),只是為了說明什么是非標操作要和API打交道,肯定少不了 Postman
大部分非標操作, Postman 是可以搞定的,但是非標操作本身是不提倡通過它來做的,首先它未過權(quán)鑒系統(tǒng),然后它是一次性的,操作時間,操作人,操作結(jié)果都不能保留,導(dǎo)致操作與工單之間的關(guān)系無處可查,是有隱患的,而且有些需要簽名的 API 更是力不從心,于是有了它:
{ "id": 3, "_params": [ { "param_name": "xxxId", "param_desc": "xxx ID", "create_date": "2017-03-07T10:51:11Z", "api_id": 3, "modify_date": "2017-03-07T10:51:11Z", "id": 1 } ], "create_date": "2017-03-07T09:45:42Z", "modify_date": "2017-03-07T10:25:31Z", "api_name": "查詢xxx信息", "api_method": "GET", "api_desc": "", "api_group": "", "api_backend": "", "api_action": "Acxxxxxnfo", "api_type": { "id": 1, "create_date": "2017-03-07T08:26:28Z", "modify_date": "2017-03-07T08:52:55Z", "type_url": "http://xxx.ucloud.cn", "type_desc": "需要簽名" }}
<!-- 動態(tài)表單 --><template v-for="(item, index) in params"> <el-form-item :label="`${item.param_desc}`"> <el-input v-model="paramsForm[item.param_name]"></el-input> </el-form-item></template>
其實這里改進的空間很大,我可在定義表結(jié)構(gòu)的時候為參數(shù)加上類型,比如:
<!-- 單選 --><el-form-item v-if="item.param_type === choice"> <choice-template></choice-template></el-form-item><!-- 時間選擇器 --><el-form-item v-if="item.param_type === datetime"> <datetime-template></datetime-template></el-form-item>// 盡情發(fā)揮
這個App的后端代碼大概是這樣:# 發(fā)請求if api_queryset.api_method.upper() == 'GET': r = requests.get(url=url, params=payload)elif api_queryset.api_method.upper() == 'POST': r = requests.post(url=url, json=payload)else: r = { 'RetCode': -1, 'Message': 'API method invalid.' }# 保存結(jié)果save_result(user_queryset=user, api_queryset=api_queryset, result=json.dumps(rt), comment=comment, desc=u'備用字段')# 就像上面判斷 method 一樣,會先判斷哪些 API 需要簽名,哪些不需要,代碼省略
主要用到了:Django + requests + djangorestframwork + MySQL
ORM 是 Django 自帶,誰用誰知道
module.exports = { build: { env: require('./prod.env'), index: path.resolve(__dirname, '../dist/index.html'), assetsRoot: path.resolve(__dirname, '../dist'), assetsSubDirectory: 'static', assetsPublicPath: '', <------ 看這里 productionSourceMap: true, bundleAnalyzerReport: process.env.npm_config_report }, dev: {}}
構(gòu)建完成的 dist 目錄中的靜態(tài)文件請求全部由 Nginx 處理,然后所有 API 交給uWSGI,可以部署兩套,通過Nginx做簡單的HA,前后端可以分開發(fā)布互不影響,開發(fā)花費的時間并不長,不到一天,思考比較費時間,一天半吧,還自己推翻了自己幾次,但是能節(jié)省小伙伴不少時間export let backendConf = { get url () { if (process.env.NODE_ENV === 'production') { return '/' } else { return 'http://127.0.0.1:8000/' } }}export let somethingElse = {}// ES6寫法,定義 getter,像Python里面的 @property 裝飾器裝飾的方法,但是Python是同步的,JS是異步的,所以用法不同// process.env.NODE_ENV 會在build的時候被替換成 'production'// 使用的時候這樣import { backendConf, somethingElse } from '../../Config'url = backendConf.urlse = somethingElse
Django 后端如何判斷:from django.conf import settingsfrom .app_settings import *if settings.DEBUG: global DEBUG DEBUG = True api = DEV_URLelse: api = PROD_URL# 附帶一個小技巧,print 大法你懂得,我這個是不用刪的那種,哈哈if DEBUG: print payload print req.url print req.json()
這樣的話,代碼直接上線,什么都不用改關(guān)鍵詞:打造,實戰(zhàn)
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。