tutorial queryset consultas commands django django-shell

queryset - filter django



Django: simula peticiones HTTP en shell (3)

(Ver tldr; abajo)

Es una pregunta antigua, pero solo agrega una respuesta, en caso de que alguien pueda estar interesado.

Aunque esta podría no ser la mejor (o digamos Django) la manera de hacer las cosas. Pero puedes intentar hacerlo de esta manera.

Dentro de tu shell django

>>> import requests >>> r = requests.get(''your_full_url_here'')

Explicación: omití el reverse() , ya que reverse() más o menos, encuentra el url asociado a una función views.py, puede omitir el reverse() si lo desea, y poner el url completo en su lugar.

Por ejemplo, si tiene una aplicación de amigos en su proyecto de django y desea ver la función list_all() (en views.py) en la aplicación de amigos, puede hacer esto.

TLDR;

>>> import requests >>> url = ''http://localhost:8000/friends/list_all'' >>> r = requests.get(url)

Acabo de enterarme de que con Rails es posible simular solicitudes HTTP en la consola con pocas líneas de código.

Echa un vistazo a: http://37signals.com/svn/posts/3176-three-quick-rails-console-tips (sección "Sumérgete en tu aplicación").

¿Hay una manera similar de hacer eso con Django? Sería útil


Cómo simulo las solicitudes desde la línea de comando de python es:

Una forma sencilla de simular solicitudes es:

>>> from django.urls import reverse >>> import requests >>> r = requests.get(reverse(''app.views.your_view'')) >>> r.text (prints output) >>> r.status_code 200

Actualización: asegúrese de iniciar el shell django (a través de manage.py shell ), no un shell clásico de Python.

Actualización 2: Para Django <1.10, cambie la primera línea a

from django.core.urlresolvers import reverse


Puede utilizar RequestFactory , que permite

  • insertar un usuario en la solicitud

  • insertar un archivo cargado en la solicitud

  • Enviando parámetros específicos a la vista.

Tenga en cuenta que debe especificar la URL y la clase de vista, por lo que requiere una línea de código adicional que el uso de requests .

from django.test import RequestFactory request_factory = RequestFactory() my_url = ''/my_full/url/here'' # Replace with your URL -- or use reverse my_request = request_factory.get(my_url) response = MyClasBasedView.as_view()(my_request) # Replace with your view response.render() print(response)

Para configurar el usuario de la solicitud, haga algo como my_request.user = User.objects.get(id=123) antes de obtener la respuesta.

Para enviar parámetros a una vista basada en clase, haga algo como la response = MyClasBasedView.as_view()(my_request, parameter_1, parameter_2)

Ejemplo extendido

Aquí hay un ejemplo del uso de RequestFactory con estas cosas en combinación

  • HTTP POST (a url url , vista funcional y un diccionario de datos post_data )

  • cargar un solo archivo (ruta file_path , nombre file_name y campo de formulario valor file_key )

  • Asignar un usuario a la solicitud ( user )

  • pasando el diccionario kwargs desde la url ( url_kwargs )

SimpleUploadedFile ayuda a formatear el archivo de manera válida para los formularios.

from django.core.files.uploadedfile import SimpleUploadedFile from django.test import RequestFactory request = RequestFactory().post(url, post_data) with open(file_path, ''rb'') as file_ptr: request.FILES[file_key] = SimpleUploadedFile(file_name, file_ptr.read()) file_ptr.seek(0) # resets the file pointer after the read if user: request.user = user response = view(request, **url_kwargs)