
Alexey
07.12.2016
11:43:59
сейчас в поиске ошибки
Значит здесь я верно указал?

Igor
07.12.2016
11:44:47
какие ошибки, давай подробнее )
разве request.User с большой буквы? о_О

Google

Alexey
07.12.2016
11:46:47
не грузит по урлу

Igor
07.12.2016
11:47:12
так а ошибки есть? трейсбек там, эксепшн от DRFа?

Vadim
07.12.2016
11:47:41
Во-первых, если мы говорим о REST, здесь я бы рекомендовал придерживаться классов viewsets.
А ты урду добавил?

Igor
07.12.2016
11:48:08
ты забыл запятую
у тебя строки склеились
похоже
вон в 2 пункте два раза повторяется
или не забыл, а просто лишнее воткнул

Alexey
07.12.2016
11:49:58
сейчас гляну

Maksim
07.12.2016
11:50:00

b0g3r
07.12.2016
11:50:48

Maksim
07.12.2016
11:51:04
Не, я на степике курс прохожу

Google

Alexey
07.12.2016
11:51:09

Maksim
07.12.2016
11:51:30
Для себя хочу разобраться какбез подобного можно сделать

Vadim
07.12.2016
11:51:32
# views.py
class LessonViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Lesson.objects.none()
serializer_class = LessonSerializer
# urls.py
router = Router()
router.register(r'lessons', views.LessonViewSet, base_name='lesson')

Alexey
07.12.2016
11:52:21

b0g3r
07.12.2016
11:52:56

Igor
07.12.2016
11:52:57
канеш, епт

b0g3r
07.12.2016
11:53:14

Vadim
07.12.2016
11:53:31

Igor
07.12.2016
11:53:34
есть еще collections.Counter или как там его

b0g3r
07.12.2016
11:53:43
вообще при решении задач на степике стоит внимательно посмотреть предыдущие ролики

Igor
07.12.2016
11:54:08
сорри!

Vadim
07.12.2016
11:54:37
Если мы говорим про „подсчитать кол-во вхождений каждой буквы“, то хоть .count("a") используй )) Вам же можно…
Но в боевом проекте я бы за это оторвал руки по самые помидоры ?

Roman
07.12.2016
11:56:20
Может кто-нибудь объяснит как всё-таки правильно авторизацию пользователя написать с обращением к бд для проверки, то уже горит жопа

Vadim
07.12.2016
11:56:44
Про ReST: https://en.wikipedia.org/wiki/Representational_state_transfer#Relationship_between_URL_and_HTTP_methods

Roman
07.12.2016
11:57:34
Flask_login

Igor
07.12.2016
11:57:48
что ты подразумеваешь под "правильно"?

Google

Maksim
07.12.2016
11:58:11

Vadim
07.12.2016
11:58:59
Flask_login
Удачи в „я выбрал лёгкий и быстрый фреймворк, не то, что эта ваша жирная и медленная джанга“ :-P

Roman
07.12.2016
11:59:15
и как с формы проверить логин и пароль
from peewee import *
from config.main import pdb
ROLE_USER = 0
ROLE_ADMIN = 1
class User(Model):
id = IntegerField(primary_key=True, unique=True)
username = CharField(40, unique=True, index=True)
password = CharField(40)
role = SmallIntegerField(default=ROLE_USER)
class Meta:
database = pdb
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return int(self.id)
def __repr__(self):
return '<User %r>' % self.nickname
Вот моделька для юзера
есть еще форма LoginForm

Vadim
07.12.2016
12:00:13

Roman
07.12.2016
12:00:16
Только вот нужна она или нет?

Igor
07.12.2016
12:00:22
ну ты как думаешь, че должно быть у пользователя?
1) id. primary key. у обычных бд типа sqlite, mysql, postgres
2) email или username. или и то, и то
3) password. захешированный.
4) ???
5) ну вон role, ок

Vadim
07.12.2016
12:00:38

Igor
07.12.2016
12:00:43
Только вот нужна она или нет?
что значит "нужна она или нет"?
ты используешь peewee?
как ты планируешь хранить пользователей в БД и не использовать модели?

Roman
07.12.2016
12:01:04
в бд

Igor
07.12.2016
12:01:12
Пароль на 40 символов? А хэш?…
так в 40 символов как раз хэш может поместиться, правда может без соли и не sha/bcrypt
но тот же md5 в хуевых образовательных целях ниче не мешает

Vadim
07.12.2016
12:01:59

Igor
07.12.2016
12:02:40

Roman
07.12.2016
12:02:53
во-во
давай на потом оставим это

Vadim
07.12.2016
12:03:18

Google

Igor
07.12.2016
12:03:28
ну не затыки, нежелание мб

Roman
07.12.2016
12:04:00
<input type="password" placeholder="Password"
name="password" value="{{ request.form.password }}">

Igor
07.12.2016
12:04:02
во-первых, какова хуя ты возвращаешь в методе get_id инт, если в документации прямым текстом просят юникод (строку)

Roman
07.12.2016
12:04:08
Вот это правильный input?

Igor
07.12.2016
12:04:40
зачем заполнять value для поля password?

Roman
07.12.2016
12:04:41

Igor
07.12.2016
12:05:04

Admin
ERROR: S client not available

Vadim
07.12.2016
12:05:09
Он же спросил, как правильно делать авторизацию? Авторизацию в вебе правильно делать так: взять логин и пароль, найти пользователя с таким логином, зашифровать пароль „как в первый раз“ и сравнить две строки. Одинаковые – на тебе ID сессии в куку и проходи. Разные – нах отсюда.

Omni
07.12.2016
12:05:16
Народ, такой вопрос. Можно получить инстанс модельки из её менеджера?
Допустим, есть модель Book и у неё objects = BookManager(). В менеджере есть некий метод foo.
Где-то я получаю инстанс
book = Book.objects.get(book_name="Kniga 1")
, а потом запускаю
book.objects.foo(params)
. Можно ли как-то получить этот конкретный инстанс book в функции foo? Не считая непосредственной передачи book как параметра, т.к. я этого пытаюсь избежать.

Roman
07.12.2016
12:05:19

Vadim
07.12.2016
12:05:30
Посоны, как из ютуба выкачать звуковой поток? Есть библиотека какая-нибудь для ютуба?

Igor
07.12.2016
12:05:46

Evgen
07.12.2016
12:05:50
Как указать явно, какой тип данных должна принимать функция?

Vadim
07.12.2016
12:06:01
Спасибо

Igor
07.12.2016
12:06:04
но id же число
а пацаны-то и не знали!
ну давай пойдем в исходники flask-login разбираться, зачем они хотят именно строку в результате этой функции

Vadim
07.12.2016
12:06:21

Roman
07.12.2016
12:06:36

Omni
07.12.2016
12:07:19

Google

Roman
07.12.2016
12:07:37
Дальше
from wtforms import Form, StringField, PasswordField, validators
class LoginForm(Form):
username = StringField('Username', [validators.DataRequired()])
password = PasswordField('Password', [validators.DataRequired()])
def __init__(self, username, password):
self.username = username
self.password = password
Нормально я тут нахуекодил?

Igor
07.12.2016
12:08:03
ну вроде похоже на правду
а ты flask-wtf юзаешь?
там вроде какие-то удобные штуки были для работы с wtforms
ну да не суть

Roman
07.12.2016
12:09:02
бля
точняк
flask_wtf

Johnnie
07.12.2016
12:09:27

Vadim
07.12.2016
12:09:29
Всмысле? Работает же
Менеджер призван работать с коллекцией/моделью/набором обектов, а не с одной сущностью.

Omni
07.12.2016
12:10:14

Vadim
07.12.2016
12:10:55

Roman
07.12.2016
12:10:56
ща погодите, перепишу forms

Johnnie
07.12.2016
12:11:01
а, нет, вру, не в одну.

Evgen
07.12.2016
12:11:05
Как указать явно, какой тип данных должна принимать функция?

Johnnie
07.12.2016
12:11:05
<form method="POST" action="/">
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name(size=20) }}
<input type="submit" value="Go">
</form>
типа такого

Omni
07.12.2016
12:11:18

Vadim
07.12.2016
12:11:48

Evgen
07.12.2016
12:12:23
Ну типа как некоторые встроенные(вроде) ф-ции, принимают значения только определённого типа

Roman
07.12.2016
12:12:43
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
def __init__(self, username, password):
self.username = username
self.password = password
Переписал
Эта группа больше не существует