Esta vez quiero compartir un widget que se me ha ocurrido hace 2 noches y que pienso que es interesante porque incorpora el uso de 2 API'S, un método de las requests de DJANGO y un script de animaciones de texto.
Puedes ver el widget en acción aquí.
Este widget muestra la ciudad, el tiempo y la temperatura del visitante usando la Ip, el procedimiento es el siguiente:
1.- Usamos un método de las requests de Django para extraer la ip:
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
context ={'ip': ip}
else:
ip = request.META.get('REMOTE_ADDR')
Aquí se guarda la ip en la variable "ip"
2.- Usando la API de Ipstack.com extraemos la ciudad de la ip:
Importamos los módulos:
iplocator_url = urllib.request.urlopen("http://api.ipstack.com/{0}?access_key=TUAPIKEY&fields=city,country_code".format(ip))
data = json.loads(iplocator_url.read())
city = data['city']
La ip la introduzco en la url usando {0} y luego agrego la variable ip usando .format(ip)
He de mencionar que para usar la API hay que crear una cuenta para poder obtener la API KEY, el nombre de la ciudad se guarda en la variable "city".
3.- Usando la API de OpenWeather …
Esta semana me ha tocado crear la posibilidad de descargar archivos desde el servidor para un usuario con permisos específicos, luego de revisar bastante rato la web para ver si conseguía un código que ya estuviera hecho, conseguí algunos pero desafortunadamente no me funcionaron, siendo así la situación me puse manos a la obra para construir la vista por mi cuenta.
Primero que nada, se debe importar al inicio del archivo el módulo de python: import mimetypes
Particularmente utilizo estos métodos para verificar el tipo de usuario:
1.- Para verificar que el usuario pertenece a un grupo:
if request.user.groups.filter(name='mentores').exists()
2.- Para verificar si es un super usuario:
if request.user.is_superuser
Luego de verificar que los usarios eran los correctos sigo con estos pasos:
El relative_path que verás en la vista de descarga viene de un método que contiene el campo FileField de los modelos de django.
Este dato viene de una vista general que lista todos los archivos de un usuario; Para generar la vista de descarga utilizo el método "URL":
<td><a href="{% url 'descarga-archivos' archivo.file.name %}">{{ archivo.file.name }}</a></td>
Esto llama a la vista 'descarga-archivos' y pasa la variable archivo.file.name
La vista queda así:
def download_pdf_file(request, relative_path):
if relative_path != '':
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
ruta_archivo = '{}/{}'.format(settings.MEDIA_ROOT, relative_path)
path = …
Desde hace unos días estoy trabajando en un proyecto para un cliente en el cual el usuario llena algunos formularios que se van guardando conforme presiona un botón, en algunos de estos formularios es posible subir archivos al servidor.
Lo interesante es que una de las especificaciones del proyecto es que en cierto punto se le pregunta al usuario si decide continuar con el siguiente formulario ó volver a comenzar y borrar toda la información que ya había introducido (Incluyendo los archivos subidos).
Cuando leo la documentación de Django explicaba lo siguiente:
Esto explica que al borrar una instancia del modelo en la base de datos únicamente se borra la info pero no el archivo.
Luego comencé a buscar en internet y encontré algunos ejemplos de como se hace creando un método en el modelo, los probé pero no me funcionaron, con lo cual decidí desarrollarlo.
Lo que decidí fué hacerlo en una de las vistas, cuando el usuario selecciona en el formulario que quiere borrar toda la información y comenzar de nuevo, …