Как внедрить переменную из HTML в views.py в Django 2? - PullRequest
0 голосов
/ 16 апреля 2019

Я пробовал несколько способов, но ни один не работал.Кнопка должна соскрести погоду с города, набранную в текстовом поле.Все операции очистки выполняются, когда я жестко кодирую название города, но я не знаю, как получить название этого города из HTML-формы в views.py.

html:

<form method="POST "action="{% url 'weather' %}">
{% csrf_token %}
    <input  type="text" value="{{ city }}">
    <button type="submit" class="btn btn-info">Get my weather</button>
</form>

views.py

def scrape_weather(request):
    old_weather = Weather.objects.all()
    old_weather.delete()
    api_adress = "http://api.openweathermap.org/data/2.5/weather?q="
    api_key = "&appid=3a99cf24b53d85f4afad6cafe99d3a34"
    city = input()
    #city = "warsaw"
    url = api_adress + city + api_key

    json_data = requests.get(url).json()
    new_weather = json_data['weather'][0]['main']
    degree_kelvin = int(json_data['main']['temp'])
    degree = degree_kelvin-273
    pressure = json_data['main']['pressure']

    new_weather = Weather()
    new_weather.degree = degree
    new_weather.pressure = pressure

    new_weather.weather = new_weather
    new_weather.save()
    if request.method == 'POST':
        form = CityForm(request.POST)
        if form.is_valid():
            pass
    else:
        form = CityForm() 
    return render(request, "news/home.html", {'form': form})

forms.py:

from django import forms

class CityForm(forms.Form):
    city = forms.CharField(max_length=30)

    if not city:
        raise forms.ValidationError('You have to write something!')

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

В вашем шаблоне вы можете:

<form method="POST "action="{% url 'weather' %}">
{% csrf_token %}
    {{ form }}
    <button type="submit" class="btn btn-info">Get my weather</button>
</form>

Это будет управлять всей бизнес-деятельностью атрибутов виджета (в данном случае ввода текста), таких как name для вас.

Читать это для более подробной информации.

0 голосов
/ 17 апреля 2019

Это не имеет ничего общего с соскабливанием или инъекцией. Чтобы браузер отправлял значение из поля ввода, элемент поля должен иметь атрибут name.

<input  type="text" name="city">

, а затем получить его в виде:

city = request.POST.get("city")

Обратите внимание, я не совсем уверен, почему у вас есть CityForm, вы не используете его.

...