1
0
forked from erp-dev/erp
Files
erpnew/api_v1/views/param_create.md

371 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 创建工艺参数 API 文档
## 接口信息
**POST** `/api/v1/parameters/`
创建新的工艺参数。
**认证方式**: JWT Token (Bearer Authentication)
**权限要求**: `IsAuthenticated` - 需要登录认证
---
## 请求说明
### 请求头
```
Authorization: Bearer {your_jwt_token}
Content-Type: application/json
```
### 请求体
**完整示例:**
```json
{
"key": "weight", // 必填,唯一标识符
"value": "500g", // 可选,参数值
"description": "重量参数", // 可选,参数描述
"is_required": false, // 可选,是否必填,默认 false
"is_image_path": false // 可选,是否图片路径,默认 false
}
```
**最小请求(只需 key**
```json
{
"key": "simple_param"
}
```
### 字段说明
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|--------|------|
| `key` | string | **是** | - | 参数键唯一标识符最大100字符 |
| `value` | string | 否 | null | 参数值最大200字符 |
| `description` | string | 否 | "" | 参数描述最大200字符 |
| `is_required` | boolean | 否 | false | 标记该参数是否为必填参数 |
| `is_image_path` | boolean | 否 | false | 标记 value 字段是否为图片URL路径 |
---
## 响应说明
### 成功响应
**状态码**: `201 Created`
**响应体:**
```json
{
"id": 5,
"key": "weight",
"value": "500g",
"attachment": null,
"attachment_url": null,
"description": "重量参数",
"is_required": false,
"is_image_path": false
}
```
### 错误响应
#### 1. key 重复
**状态码**: `400 Bad Request`
**响应体:**
```json
{
"key": ["具有 参数键 的 state parameter 已存在。"]
}
```
#### 2. 未认证
**状态码**: `401 Unauthorized`
**响应体:**
```json
{
"detail": "身份认证信息未提供。"
}
```
#### 3. 字段验证失败
**状态码**: `400 Bad Request`
**响应体示例:**
```json
{
"key": ["该字段是必填项。"]
}
```
---
## 使用示例
### JavaScript (Fetch API)
```javascript
async function createParameter(paramData) {
const response = await fetch('/api/v1/parameters/', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
key: paramData.key,
value: paramData.value,
description: paramData.description,
is_required: paramData.isRequired || false,
is_image_path: paramData.isImagePath || false
})
});
if (!response.ok) {
const error = await response.json();
if (error.key) {
throw new Error('参数键已存在,请使用其他名称');
}
throw new Error('创建失败');
}
return await response.json();
}
// 使用示例
try {
const newParam = await createParameter({
key: 'fabric_color',
value: '红色',
description: '面料颜色',
isRequired: true,
isImagePath: false
});
console.log('创建成功:', newParam);
} catch (error) {
console.error('创建失败:', error.message);
}
```
### JavaScript (Axios)
```javascript
import axios from 'axios';
async function createParameter(paramData) {
try {
const response = await axios.post('/api/v1/parameters/', {
key: paramData.key,
value: paramData.value,
description: paramData.description,
is_required: paramData.isRequired || false,
is_image_path: paramData.isImagePath || false
}, {
headers: {
'Authorization': `Bearer ${token}`
}
});
return response.data;
} catch (error) {
if (error.response?.data?.key) {
throw new Error('参数键已存在');
}
throw error;
}
}
```
### Python (requests)
```python
import requests
def create_parameter(token, key, value=None, description='', is_required=False, is_image_path=False):
url = 'https://your-domain.com/api/v1/parameters/'
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
data = {
'key': key,
'value': value,
'description': description,
'is_required': is_required,
'is_image_path': is_image_path
}
response = requests.post(url, json=data, headers=headers)
if response.status_code == 201:
return response.json()
elif response.status_code == 400:
error = response.json()
if 'key' in error:
raise ValueError('参数键已存在')
raise ValueError(f'创建失败: {error}')
else:
response.raise_for_status()
# 使用示例
try:
new_param = create_parameter(
token='your_jwt_token',
key='fabric_weight',
value='300g/m²',
description='面料克重',
is_required=True
)
print(f'创建成功: {new_param}')
except ValueError as e:
print(f'错误: {e}')
```
### cURL
```bash
# 基本创建
curl -X POST https://your-domain.com/api/v1/parameters/ \
-H "Authorization: Bearer your_jwt_token" \
-H "Content-Type: application/json" \
-d '{
"key": "print_method",
"value": "丝网印刷",
"description": "印刷方式",
"is_required": true,
"is_image_path": false
}'
# 最小请求(只创建 key
curl -X POST https://your-domain.com/api/v1/parameters/ \
-H "Authorization: Bearer your_jwt_token" \
-H "Content-Type: application/json" \
-d '{"key": "simple_param"}'
```
---
## 常见使用场景
### 场景1创建普通文本参数
```javascript
const textParam = await createParameter({
key: 'fabric_type',
value: '纯棉',
description: '面料类型',
isRequired: true,
isImagePath: false
});
```
### 场景2创建图片路径参数
```javascript
const imageParam = await createParameter({
key: 'design_preview',
value: '/uploads/designs/preview_001.jpg',
description: '设计预览图',
isRequired: false,
isImagePath: true // 标记为图片路径
});
```
### 场景3创建必填参数用于流程验证
```javascript
const requiredParam = await createParameter({
key: 'customer_approval',
value: '待确认',
description: '客户审批状态',
isRequired: true, // 标记为必填
isImagePath: false
});
```
### 场景4批量创建参数
```javascript
const paramsToCreate = [
{ key: 'color', description: '颜色' },
{ key: 'size', description: '尺寸' },
{ key: 'quantity', description: '数量' }
];
const results = await Promise.all(
paramsToCreate.map(param => createParameter(param))
);
console.log('批量创建完成:', results);
```
---
## 注意事项
1. ⚠️ **key 必须唯一**:如果 key 已存在,会返回 400 错误,创建前可以先查询是否存在
2. 📝 **value 可为空**value 字段是可选的,可以先创建参数,后续再更新值
3. 🔐 **必须认证**:请求头必须包含有效的 JWT Token
4. 🏷️ **is_image_path 标记**:如果 value 存储的是图片路径,建议设置 `is_image_path: true` 以便前端正确处理
5.**is_required 标记**:用于标识该参数在业务流程中是否为必填项,方便表单验证
---
## 与其他接口的配合使用
### 创建后查询详情
```javascript
// 1. 创建参数
const newParam = await createParameter({
key: 'logo_position',
description: 'Logo位置'
});
// 2. 查询详情
const detail = await fetch(`/api/v1/parameters/${newParam.id}/`, {
headers: { 'Authorization': `Bearer ${token}` }
}).then(r => r.json());
```
### 创建后立即更新
```javascript
// 1. 先创建
const param = await createParameter({
key: 'temp_param'
});
// 2. 立即更新值
const updated = await fetch(`/api/v1/parameters/${param.id}/`, {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
value: '最终值',
description: '更新后的描述'
})
}).then(r => r.json());
```
---
## 测试状态
✅ 所有相关测试用例已通过:
- 创建普通参数
- 创建最小参数(仅 key
- 重复 key 验证
- 字段验证
- 认证验证
接口已可用于生产环境。