1. 程式人生 > >基於Python Django開發的一個mock

基於Python Django開發的一個mock

csr att project dump 方便 配置 man ali uid

最近研究了一下python的django框架, 發現這個框架不比Java spring boot差, mock同樣一個接口, 代碼量少很多, 維護起來也很方便, 廢話不多說,直接上代碼

1. 安裝django: pip install django

2. 創建項目: django-admin startproject postdemo

3. 啟動項目: python manage.py runserver 0.0.0.0:8001

啟動Django項目就這麽簡單, 三步完成, O(∩_∩)O

postdemo 包下創建views.py

 1 from django.http import HttpResponse
2 3 from .utils import process_parameters, validate_parameters, read_response 4 5 6 def postdemo(request): 7 if request.method == POST: 8 dic_params = process_parameters(request.body.decode(utf-8)) # 一定要用utf-8解碼,不然傳入的是bytes類型b‘body‘ 9 if validate_parameters(dic_params):
10 result = read_response() 11 res = HttpResponse(result) 12 # res.__setitem__("resultcode", ‘0‘) # 用這個也OK, __setitem__可以修改默認的header, 比如Content-Type, setdefault不行 13 res.setdefault(resultcode, 0) 14 res.setdefault(msg, no error) 15 return
res 16 else: 17 return HttpResponse(error username or password!) 18 else: 19 return HttpResponse(error method!)

postdemo 包下創建utils.py, 定義業務邏輯方法, 采用函數式編程也可以

 1 import configparser
 2 import json
 3 
 4 
 5 def read_config():
 6     config = configparser.ConfigParser()
 7     dic = {}
 8     config.read("./config.ini", encoding="utf8")
 9     config.sections()
10     dic["username"] = config.get("login", "username")
11     dic["password"] = config.get("login", "password")
12     return dic
13 
14 
15 def read_response():
16     config = configparser.ConfigParser()
17     dic = {}
18     config.read("./config.ini", encoding="utf8")
19     config.sections()
20     dic["nickname"] = config.get("response_data", "nickname")
21     dic["sex"] = config.get("response_data", "sex")
22     dic["age"] = config.get("response_data", "age")
23     dic["status"] = config.getint("response_data", "status")
24     dic["uid"] = config.get("response_data", "uid")
25     return json.dumps(dic, ensure_ascii=False)
26 
27 
28 def process_parameters(body):
29     try:
30         body_dic = {}
31         key_values = str(body).split("&")
32         for key_value in key_values:
33             body_dic[key_value.split("=")[0]] = key_value.split("=")[1]
34         return body_dic
35     except Exception as e:
36         return e
37 
38 
39 def validate_parameters(body):
40     if isinstance(body, dict):
41         dic_config = read_config()
42         if dic_config["username"] == body["username"] and dic_config["password"] == body["password"]:
43             return True
44         else:
45             return False

postdemo包平級目錄創建配置文件config.ini

[login]
username=123456789@qq.com
password=123456

[response_data]
nickname=旦增尼瑪
sex=1
age=18
status=1
uid=123456789

默認文件urls.py, 添加path

1 from django.contrib import admin
2 from django.urls import path
3 
4 from . import views
5 
6 urlpatterns = [
7     path(admin/, admin.site.urls),
8     path(postdemo, views.postdemo),
9 ]

默認文件setting.py, 註釋掉中間件的csrf安全驗證, 其他默認

1 MIDDLEWARE = [
2     django.middleware.security.SecurityMiddleware,
3     django.contrib.sessions.middleware.SessionMiddleware,
4     django.middleware.common.CommonMiddleware,
5 #    ‘django.middleware.csrf.CsrfViewMiddleware‘,
6     django.contrib.auth.middleware.AuthenticationMiddleware,
7     django.contrib.messages.middleware.MessageMiddleware,
8     django.middleware.clickjacking.XFrameOptionsMiddleware,
9 ]

到這裏就完了, 一個簡單的post 接口就完成了, 如果還有進行cookie等校驗, 完善utils.py業務處理邏輯即可, 啟動項目

技術分享圖片

技術分享圖片

基於Python Django開發的一個mock