@python_beginnersЭта группа больше не существует

Страница 635 из 1885
light
26.10.2016
19:35:38
это переопределение декоратора @user_requier

Igor
26.10.2016
19:36:05
@login_required* да нет, почему сразу переопределение. login_required много чего решает. а у тебя всего лишь редирект будет, если от клиента пришел запрос на редирект

light
26.10.2016
19:37:05
эх

пойду покурю

Google
Igor
26.10.2016
19:37:43
вон на стековерфлоу готовую мидлварю сделали

http://stackoverflow.com/a/10951158/974317

light
26.10.2016
19:37:47
т.е. если я этот декоратор пропишу во вьюхе- то редирект заработет?

Igor
26.10.2016
19:37:55
бля, эт не то

зато ты можешь взять ее и шустро допилить под свои нужды, и не надо будет никакие декораторы нахуй нигде ставить с другой стороны, зачем тебе лишняя мидлваря с возможностью переадресации на всех вьюхах

т.е. если я этот декоратор пропишу во вьюхе- то редирект заработет?
ну, эээ, должен просто тут уж ты сам смотри. @login_required одним своим названием говорит, что твой юзер пойдет нахуй, если он не залогинен

а когда залогинится - вернется обратно на /shop/куда-то-там/, откуда пришел, короче

(его туда принесет джанговский декоратор, собственно)

т.е. переадресация, как мне кажется, будет работать ни разу не так, как тебе надо %)

light
26.10.2016
19:42:45
все верно

Igor
26.10.2016
19:43:23
да сделай ты просто, во вьюхе def my_view(request): # ... if request.method == 'POST': # ... redirect_url = request.POST.get('next') if redirect_url: return redirect(redirect_url) # ... return ... в шаблоне <form method="post" action="/my/view/"> <input type="hidden" name="next" value="{{ request.path }}"> </form> ты говорил, что шаблон с формой на отдельной странице. в смысле, в отдельном шаблоне? (.html файлике) или именно в отдельной вьюхе? если второе, то {{ request.path }} тебя не спасет, он ж будет возвращать текущий путь, к странице с формкой, на которой юзер щас находится

значит его будет бесконечно редиректить

тьфу, не бесконечно конечно, раз POST в любом случае его назад на эту же форму редиректнет тогда :)

Google
Johnnie
26.10.2016
19:44:46
Кстати, как должна выглядеть функция next_if_valid во фласке при подобных редиректах?

Или как-то похоже называется, не помню

Igor
26.10.2016
19:45:36
ну, эта функция должна отсекать все get-аргументы, чтоб осталась чисто ссылка, а потом сравнивать ее со всеми роутами в проекте

если не нашлось - слать нахуй (403 показывать, 404, на главную странцу отправлять, да че угодно)

если нашлось - подчиняться

F
26.10.2016
19:46:23
придумал как еще жощще сделать чат

а что, если в диалоге хранить не время последнего сообщения, а само последнее сообщения по OneToOne?

ну и индексировать тож прокатит?

Johnnie
26.10.2016
19:46:57
если нашлось - подчиняться
А чё мешает просто выплюнуть 404 или 403?

Igor
26.10.2016
19:46:59
ну и не только get-аргументы, ведь там шаблонное форматирование тоже есть ну, типа, /api/users/123/ и /api/users/456/ - это один и тот же роут/вьюха, по факту

А чё мешает просто выплюнуть 404 или 403?
зачем выплевывать 404 или 403, если страница НАШЛАСЬ? ))

(ну и у юзера есть к ней доступ)

Johnnie
26.10.2016
19:47:32
Нет, я имею в виду без этой проверки

Igor
26.10.2016
19:47:44
а как ты это сделаешь?

Johnnie
26.10.2016
19:47:44
Запросил хуйню -ушел в 404

F
26.10.2016
19:47:51
@iamigor шо думаешь?

Johnnie
26.10.2016
19:48:08
Ну это же будет обычное обращение в роуты

Igor
26.10.2016
19:48:38
Запросил хуйню -ушел в 404
а, в этом смысле. а если он хакнет твой сайт и будет подставлять в next всем юзерам, например, hot-gay-pre-teen.com?

> Warning: You MUST validate the value of the next parameter. If you do not, your application will be vulnerable to open redirects.

собстна, из документации flask-login

Google
Johnnie
26.10.2016
19:49:25
Как хакнет? Если хакнет, то там уже пох на этот текст)

Некст

Igor
26.10.2016
19:49:30
и вот страничка на овасп

https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet

Johnnie
26.10.2016
19:49:46
Если мы и так телодвижения ограничиваем роутами

Igor
26.10.2016
19:50:14
https://habrahabr.ru/company/pt/blog/247709/

http://v-resheno.ru/610347-how-to-avoid-open-redirect-vulnerability-and-safely-redirect-on-successful-login

вот просто охуительный пример

http://www.mybank.com/logon?returnUrl=http://www.badsite.com

Владислав
26.10.2016
19:51:16
Мужчины, как поставить библиотеку json для винды?

Igor
26.10.2016
19:51:23
pip install json?

.
26.10.2016
19:51:42
TemplateDoesNotExist at /polls polls/index.html Template-loader postmortem Django tried loading these templates, in this order: Using engine django: django.template.loaders.app_directories.Loader: /home/pc/py3env/lib/python3.5/site-packages/django/contrib/admin/templates/polls/index.html (Source does not exist) django.template.loaders.app_directories.Loader: /home/pc/py3env/lib/python3.5/site-packages/django/contrib/auth/templates/polls/index.html (Source does not exist) Теперь выдает вот это, после смены названия папки templates на template

F
26.10.2016
19:51:46
@_@

Igor
26.10.2016
19:52:01
ты истроию проебешь

история прригодится

че если у юзера два телефона и планшет?

F
26.10.2016
19:52:15
Igor
26.10.2016
19:52:26
а как ты будешь запрашивать предыдущие сообщения в диалоге?

Google
Igor
26.10.2016
19:52:48
pip install simplejson? ))

F
26.10.2016
19:52:57
а как ты будешь запрашивать предыдущие сообщения в диалоге?
Messages.objects.filter(dialog=%id%, since=%timestamp%) ченить такое

Igor
26.10.2016
19:53:08
а, я тебя не понял изначально

Владислав
26.10.2016
19:53:13
pip install simplejson? ))
О! пасибули)

Igor
26.10.2016
19:53:29
О! пасибули)
стоп, а че, под виндой нету из-под коробки библиотеки для работы с json? O_O

F
26.10.2016
19:53:34
просто чтоб выдачу сделать как в ВК мне нужно не просто время последнего сообщения для сортировки диалогов знать, а еще и кто это сообщение отправил

Admin
ERROR: S client not available

Igor
26.10.2016
19:54:20
а что, если в диалоге хранить не время последнего сообщения, а само последнее сообщения по OneToOne?
но тогда зачем это хранить в диалоге, когда можно сразу обращаться в таблицу сообщений за последним сообщением?

не надо индексировать тексты сообщений, нахуя

Естт
бля, мне щас зарт пизды вломит за то, что я человека отправил simplejson скачивать

b0g3r
26.10.2016
19:54:53
F
26.10.2016
19:55:00
чтоб получать именно диалоги на страницу диалогов, тк запросы будут к ней часто я и не собирался текст индексировать

F
26.10.2016
19:55:10
ща напишу че хочу

light
26.10.2016
19:55:30
а если я её хочу потом в контекст процессор запилить потом?

F
26.10.2016
19:55:48
class ChatDialog(models.Model): created_at = models.DateTimeField() from_user = models.ForeignKey('User',db_index=True, related_name='dialogs_from') to_user = models.ForeignKey('User', db_index=True, related_name='dialogs_to') last_message = models.OneToOneField('ChatMessage', db_index=True)

Igor
26.10.2016
19:56:13
ща напишу че хочу
во, вроде понял но че мешает сделать так? SELECT user_from, timestamp, message FROM messages WHERE user_to = self.request.user.id GROUP BY user_from ORDER BY timestamp DESC LIMIT 1;

F
26.10.2016
19:56:57
хотя лол мб просто юзерайди писать

Google
F
26.10.2016
19:57:34
хоть стрингом :D

чтоб оно не бегало за юзером в таблицу

Igor
26.10.2016
19:57:50
так у тебя и будет по-минимуму нагружаться, че там мой запрос как пример по факту будет че-т типа select timestamp, message from messages where dialog_id in (select id from dialog where user_to = self.request.user.id)

не вижу в этом ниче плохого

light
26.10.2016
19:57:58
снов люди

Igor
26.10.2016
19:57:58
по timestamp и юзерам есть индексы и по диалогам

light
26.10.2016
19:58:04
завтра еще отпишу

Игорь, спасибо тебе

Igor
26.10.2016
19:58:11
доброй

хотя, наверное, здесь можно сраться вечно, не зря там кучу нормальных форм придумали

с одной стороны, дублируешь данные с другой стороны, обращаешься к двум таблиццам что там хуйня, что здесь хуйня %)

F
26.10.2016
19:59:09
select timestamp, message from messages where dialog_id in (select id from dialog where user_to = self.request.user.id) or dialog_id in (select id from dialog where user_from = self.request.user.id) - а не так разве будет?

Igor
26.10.2016
19:59:46
можно ж упростить select timestamp, message from messages where dialog_id in (select id from dialog where self.request.user.id in (user_from, user_to))

но да, ты прав

Johnnie
26.10.2016
20:00:14
вот просто охуительный пример
Спасибо, надо теперь подумать как его реализовать. Только сначала проект заново надо написать ибо исходники пошли по пизде :(

Igor
26.10.2016
20:00:33
или в гитлабчики там всякие, битбакеты

F
26.10.2016
20:00:46


Igor
26.10.2016
20:00:48
заодно их подтянешь, пригодится рано или поздно

Страница 635 из 1885

Эта группа больше не существует Эта группа больше не существует