Предоставление сценариев Django Rest API - PullRequest
0 голосов
/ 03 октября 2018

У меня есть простое существующее приложение 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" }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...