1

j'ai une demande de posteAppel api sans connaître l'adresse IP dans django

http://localhost:8000/api/orders/shipment 

ce que je veux faire est que je ne veux pas passer domaine/adresse IP et accéder à quelque chose api comme console d'administration Django donner « 172,18 .0.1 - - méthode [08/Sep/2017 14:30:29] "POST /adminorder/commande/import/ HTTP/1.1" 200 "

Je cherchai dans la documentation de django get_absolute_url() est là pour définir des URL personnalisées, je ne comprends pas comment l'utiliser dans ce scénario.

+0

Postez le code dans lequel vous appelez la requête POST. – moidol

+0

J'utilise cette URL pour importer le jeu de données csv ** data = requests.post (url = url, data = content, en-têtes = en-têtes) ** Je le passe comme url – Brijesh

+0

Copie possible de [Comment obtenir le serveur nom dans Django pour une URL complète?] (https://stackoverflow.com/questions/892997/how-do-i-get-the-server-name-in-django-for-a-complete-url) –

Répondre

0

Je crois qu'il est impossible d'utiliser une URL relative dans les requêtes, mais vous pouvez contourner ce problème en créant une fonction qui ajoute le domaine concerné à votre URL. (Assurez-vous d'importer vos paramètres fichier!)

from django.conf import settings 

development_url = "http://localhost:8000/" 
production_url = "http://myapisite.com/" 

def create_url(relative_url): 
    # If you are on your development server. This is assuming your development always has DEBUG = True, and your production is always DEBUG = False 
    if settings.DEBUG: 
     return development_url + relative_url 

    # Production 
    return production_url + relative_url 

Par conséquent print(create_url("api/test/anothertest")) retournera http://localhost:8000/api/test/anothertest.

Et voici comment vous l'utiliser:

url = create_url("api/orders/shipment/") 
data = requests.post(url=url, data=content, headers = headers)