У меня есть простое существующее приложение Django, которое выполняет несколько REST-вызовов стороннему инструменту для создания некоторых пользователей.Теперь мне было поручено представить существующее приложение Django для вызовов REST API с другой платформы.Мой вопрос заключается в том, как передать параметры, отправленные с помощью запросов REST от стороннего инструмента, в мое существующее приложение, чтобы эти параметры можно было использовать для передачи запросов REST, выполняемых в моем приложении, для создания / обновления пользователей в другой третитусовочная площадка.Я предполагаю, что это возможно.
Это часть файла views.py: (Я хочу представить эту страницу представлений как REST API, который пользователь может вызвать и передать необходимую информацию (server_name
, user_name
, password
, site_url
) к нему, чтобы его можно было передать в функцию addUser для запуска последующего запроса REST
def signIn(server_name, user_name, password, site_url, contentUrl):
site_url = contentUrl[site_url]
payload = {
"credentials": {
"name": user_name,
"password": password,
"site": {
"contentUrl": site_url
}
}
}
headers = {
"accept" : "application/json",
"content-type" : "application/json"
}
signIn_req_url = "https://{server}/api/{api}/auth/signin".format(server=server_name, api=api)
signIn_req = requests.post(signIn_req_url, json=payload, headers=headers, verify=False)
response = json.loads(signIn_req.content)
headers["X-tableau-auth"] = response["credentials"]["token"]
site_id = response["credentials"]["site"]["id"]
return(headers, site_id)
# Create your views here.
def index(request):
return(render(request, "index.html"))
def checkTest(request):
cluster = request.GET.get("cluster")
contentURLs = { "Default" : "" }
site_url = "Default"
server_name = server_dict[cluster]
headers, site_id = signIn(server_name, user_name, password, site_url, contentURLs)
sites_req_url = "https://{server}/api/{api}/sites".format(server=server_name, api=api)
sites_req = requests.get(sites_req_url, headers=headers, verify=False)
sites_res = json.loads(sites_req.content)
data = {}
for item in sites_res["sites"]["site"]:
data[item["name"]] = item["name"]
contentURLs[item["name"]] = item["contentUrl"]
signout_req_url = "http://{server}/api/{api}/auth/signout".format(server=server_name, api=api)
signout_req = requests.post(signout_req_url, data=b'', headers=headers, verify=False)
request.session["content"] = contentURLs
return JsonResponse(data)
def addUser(request):
if request.method == "POST":
form = addUserForm(request.POST)
if form.is_valid():
server_name = server_dict[form.cleaned_data["cluster"]]
add_payload = {
"user": {
"name" : form.cleaned_data["user_id"],
"siteRole" : form.cleaned_data["privelege"],
"authSetting" : "ServerDefault"
}
}
site_url = form.cleaned_data["site"]
headers, site_id = signIn(server_name, user_name, password, site_url, request.session["content"])
add_req_url = "https://{server}/api/{api}/sites/{site}/users".format(server=server_name, api=api, site=site_id)
add_req = requests.post(add_req_url, json=add_payload, headers=headers, verify=False)
signout_req_url = "http://{server}/api/{api}/auth/signout".format(server=server_name, api=api)
signout_req = requests.post(signout_req_url, data=b'', headers=headers, verify=False)
if add_req.status_code == 201:
messages.success(request, 'User added successfully!')
else:
messages.success(request, 'Something went wrong while adding user!')
return HttpResponseRedirect("index")
else:
form = addUserForm()
return(render(request, "addUser.html", { "form" : form }))
Следующее является частью файла url.py приложения
urlpatterns = [
# CONTROL
path("checkTest", views.checkTest, name="checkTest"),
# PAGES
path("index", views.index, name="index"),
path("logon", views.logon, name="logon"),
path("addUser", views.addUser, name="addUser"),
...
]
И в файле forms.py содержатся классы
class addUserForm(forms.Form):
cluster = forms.ChoiceField(widget=forms.Select(attrs={ "id" : "id_cluster" }), choices=TABLEAU_ENVIRONMENTS)
privelege = forms.ChoiceField(widget=forms.Select(attrs={ "id" : "id_privelege" }), choices=ROLES)
user_id = forms.CharField(widget=forms.TextInput(attrs={ "id" : "id_user_id" }), label="User ID", max_length=10)
site = forms.CharField(widget=forms.Select(attrs={ "id" : "id_site" }))