Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/56: Рейтинг темы: голосов - 56, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15

Получить данные, введенные пользователем

29.03.2014, 11:35. Показов 10888. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть вопросы по поводу того, как работать с данными введенными пользователем.
Опишу всю задачу, т.к. может вообще не в том направлении двигаюсь.

Результат хочу получить такой: страница со списком товаров (количество постоянное, примерно 20 товаров). Все стандартно, название, описание, пикча, прайс и поле ввода для количества. Пользователь вводит количество и получает сумму, которую должен заплатить (тож все просто прайс * на его количество). Вот он вводит необходимое коичество в, допустим 5 товаров из 20.
Есть "сабмит", по клику на который, пользователь получает excel в виде счета с его 5 позицями. Все.

Остановился, можно сказать, в самом начале. )))

models.py
Python
1
2
3
4
5
6
7
8
9
10
11
from django.db import models
from django.forms import ModelForm
 
class Product(models.Model):
    picture = models.ImageField(upload_to="myapp/images")
    name = models.CharField(max_length=200)
    text = models.TextField()
    price1 = models.DecimalField(max_digits=8, decimal_places=2)
    
    def __str__(self):
       return self.name
forms.py
Python
1
2
3
4
from django import forms
 
class Quantity(forms.Form):
    number = forms.IntegerField()
views.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from django.http import HttpResponse
from django.shortcuts import render_to_response
from myapp.models import Product
from myapp.forms import Quantity
 
def product(request):
    list_of_products = Product.objects.all()
    if request.method == 'POST':
        form = Quantity(request.POST)
        if form.is_valid():
        ???????????
    else: form = Quantity()
    return render_to_response('myapp/product.html', {'list_of_products': list_of_products, 'form': form,})
product.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{% extends "myapp/main_template.html" %}
{% load staticfiles %}
{% block content %}
    <ul id="boxOfProduct">
    {% for product in list_of_products %}
        <li>
            <div id="nameProduct">{{ product.name }}</div> 
            <div id="picture">{{ product.picture }}</div> 
            <div id="productDescription">{{ product.text }}</div> 
            <div id="productPrice">{{ product.price1 }}</div>
            <form action="{% url 'myapp:product'  %}" method="POST">{% csrf_token %}
            {{ form }}
            <input type="submit" value="Submit" />
            </form>
        </li>
    {% endfor %}
    </ul>
 
{% endblock %}
в урлах все стандартно отобразил:
Python
1
2
3
4
5
6
7
from django.conf.urls import patterns, url
from myapp import views
 
urlpatterns = patterns('', 
    url(r'^$', views.home, name = 'home'),        
    url(r'^about/', views.about, name = 'about'),
    url(r'^product/', views.product, name = 'product'),
Какие проблемы я сейчас для себя вижу:
1) Ну самое первое это метод получения значения. Читал на замечательном djbook.ru, что доступиться к данным можно через cleaned_data, но безуспешно. ((
2) Есть ли возможность в django (python) выполнения метода без клика по "сабмиту", а после введения значения, получить множество (количество * прайс) сразу при вводе (что-то аналогичное setInterval в JS).
3) Вот когда я все-таки получу значение введенное пользователем и настанет момент истины и мне придется его умножать на прайс нужного мне товара, мне нужен будет объект экземпляра именно этого товара. Вот тут мне хочется переписать views.py вместо Product.objects.all() присвоить Product(). Но как тогда все товары вывести на страницу.

В общем сами видите, у меня в голове все смешалось. Если Вам не лень, помогите собрать оставшиеся мозги в кучу. )))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2014, 11:35
Ответы с готовыми решениями:

Виджеты. прочесть данные введенные пользователем
Добрый день. Извините за нубский вопрос, но никак не могу найти инфу о том как прочитать то что пользователь ввел в Entry или Text....

Как сделать так, чтобы введённые пользователем данные в словаре сохранялись при каждом новом запуске программы?
Подскажите, пожалуйста, есть ли способ сделать так, что бы введённые пользователем данные в словарь сохранялись при новом запуске программы.

Сохранять введенные данные
Всем хай. Возникла проблемка. Я в программировании начинающий, можно сказать ноль. Написать элементарную задачу - проблема. Хотя решаю я их...

10
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
29.03.2014, 16:26
а что будет выдавать такой вариант в консоль?
Python
1
2
if form.is_valid():
        print form.cleaned_data
И ещё вопрос у меня, не только к вам, а вообще может кто прояснит, мы ж применяем пост запрос когда хотим занести данные в бд, так? а у вас данные будут заносится в бд? или же вы будете выводить просто сумму покупки пользователю, т.е в бд ничего заносится не будет?
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
29.03.2014, 17:00  [ТС]
Будет ругаться, что я неправильно использую словарь.
На самом деле, я новичок в программировании (иначе бы таких нубских вопросов не задавал). Но пост, на сколько понимаю, всегда пишет в БД. Если не прав, поправьте.
0
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
29.03.2014, 17:25
dsptd, ну так-то и через get делать запись в бд никто не запрещает, просто это небезопасно я так понимаю. а как именно ругается если принт ставите?

Добавлено через 11 минут
И если мы не будем создавать новую запись в некой таблице нашей бд (т.е. нашей модели джанго), то мы и через пост ничего не запишем. Я сам новичок, сам пытаюсь разобраться
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
29.03.2014, 17:37  [ТС]
Думаю, мы сейчас со сторны вот на этих похожи! ))))
0
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
29.03.2014, 19:05
dsptd, ну батенька это оффтоп, а по существу - вот вы вставили проверку валидации формы и вывод чистых данных в консоль, и что он выводит? какая ошибка(название ошибки, код и т.д.)? а лучше сразу трэйсбэк.
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
29.03.2014, 19:56  [ТС]
М-де.
Я его со скобочками писал, как и все функции или методы, поэтому получал:
Traceback:
File "/usr/local/lib/python3.3/dist-packages/django/core/handlers/base.py" in get_response
114. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/******/local/test/********/myapp/views.py" in product
20. n = (form.cleaned_data())

Exception Type: TypeError at /myapp/product/
Exception Value: 'dict' object is not callable

Добавлено через 18 минут
Да. Через консольку все выходит.
**************************************** ********** python manage.py shell
Python 3.3.2+ (default, Feb 28 2014, 00:52:16)
[GCC 4.8.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from myapp.forms import Quantity
>>> data = {'number': 5}
>>> f = Quantity(data)
>>> f.is_valid()
True
>>> f.cleaned_data
{'number': 5}
>>>
0
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
29.03.2014, 20:03
dsptd, т.е. form.cleaned_data прокатывает и вы просто скобки ненужные ставили? тогда у вас первый пункт решен.
насчет третьего пункта - никто не запрещает вам делать два запроса: один будет получать все продукты, а второй будет получать продукт через Product.objects.get() (например по id, но тогда этот id нужно в форме передавать скрытым полем...наверное...откуда-то же он должен его брать)....т.е. проблемы здесь нет...ну если я вас правильно понял.
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
29.03.2014, 20:43  [ТС]
В итоге вот как поменял в представлении:
views.py
Python
1
2
3
4
5
6
7
8
def product(request):
    list_of_products = Product.objects.all()
    if request.method == 'POST':
        form = Quantity(request.POST)
        if form.is_valid():
            result =  form.cleaned_data['number']
    else: form = Quantity()
    return render_to_response('myapp/product.html', {'list_of_products': list_of_products, 'form': form, 'result': result})
и в темплете добавил {{result}}
product.html
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{% extends "myapp/main_template.html" %}
{% load staticfiles %}
{% block content %}
    <ul id="boxOfProduct">
    {% for product in list_of_products %}
        <li>
            <div id="nameProduct">{{ product.name }}</div> 
            <div id="picture">{{ product.picture }}</div> 
            <div id="productDescription">{{ product.text }}</div> 
            <div id="productPrice">{{ product.price1 }}</div>
            <div id="productPrice">{{ product.price2 }}</div>
            <div id="productPrice">{{ product.price3 }}</div>
            <form action="{% url 'myapp:product'  %}" method="POST"><!-- {% csrf_token %} -->
            {{ form }}
            <input type="submit" value="Submit" />
            </form>
            {{ result }}
        </li>
    {% endfor %}
    </ul>
 
{% endblock %}
Стало выдавать вводимое значение.

Добавлено через 11 минут
Zarex, спасибо за уделенное время.
По поводу object.get(id) - гут пойнт, но я пока слабо представляю, как его получить.
Ушел читать учебник, как что-нибудь выварю или уткнусь в стену опять, напишу.

Хорошего кодинга!
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
30.03.2014, 03:46
Цитата Сообщение от dsptd Посмотреть сообщение
удет ругаться, что я неправильно использую словарь.
На самом деле, я новичок в программировании (иначе бы таких нубских вопросов не задавал). Но пост, на сколько понимаю, всегда пишет в БД. Если не прав, поправьте.
Цитата Сообщение от Zarex Посмотреть сообщение
И ещё вопрос у меня, не только к вам, а вообще может кто прояснит, мы ж применяем пост запрос когда хотим занести данные в бд, так? а у вас данные будут заносится в бд? или же вы будете выводить просто сумму покупки пользователю, т.е в бд ничего заносится не будет?
А теперь дружно идём и читем, что такое HTTP, REST, XML-RPC, SOAP, и понимаем, что к записи к БД и post и GET запрос в HTTP ну ничего общего не имеют на самом деле, а просто в GET запросе данные передаются в url-е, а в post в теле запроса. А уж откуда данные брать для записи в БД, SQL да и СУБД любой никакого значения не имеет. Просто url:
1) Имеет ограничения на длинну
2) Его трудное защитить( если вообще можно)

Добавлено через 41 секунду
А если вы файл принимает в POST запросе, вы его тоже в БД будете пихать?

Добавлено через 40 секунд
Или авторизация пользователя? Вообще ребят, курим основы веб-технологий, они ой как пригодяться....
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 15
30.03.2014, 04:34  [ТС]
Wolkodav, спасибо!
Да уж. Вы правы.
)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2014, 04:34
Помогаю со студенческими работами здесь

Как распределить введенные данные
От меня требуется ввести данные, например . Я хотел взять каждое второе число из этих данных. На выходе получить список вот мой код ...

Как сохранить данные, введённые в tkinter.Enter?
Пытаюсь писать гуи спомощью tkinter. На форме разместил виджет tkinter.Enter и теперь нужно сохранить данные которые пользователь введёт в...

Как вывести введенные данные с админки на HTML страницу?
Всем привет! Как отобразить данные на странице? Мои жалкие попытки не принесли результатов. views.py def Retro(request): retro...

Как открывать введённые данные пользователя при следующем заходе?
Здравствуйте, как мне сделать, чтобы имя пользователя и введённые данные оставались и открывались при следующих заходах? name =...

Введённые данные в консоль по итогу стирают все пробелы, как добавить возможность пробелов
Код import os def tt(): st=input(&quot;Ввести текст: &quot;) st=st.replace(' ','') s=&quot;start...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru