Предупреждение: используется необработанный язык. У меня иногда грязный рот. Не читайте, если вам не нравится, когда используется язык взрослых. Я здесь сырой и нефильтрованный, как и в реальной жизни!
Примечание для всех, кто интересуется метриками: sh*t появляется 7 раз, f*ck появляется дважды.
Я в первую очередь программист. Мне платили за разработку таких вещей, как приложение для iOS. Мне также платили за исправление ошибок в больших корпоративных приложениях iOS. Кроме того, мне платили за написание скриптов на Python и выполнение пентестов на iOS, Android и веб-приложениях.
Существует огромная разница между моим набором навыков и наборами навыков “реальных разработчиков”.
Настоящие разработчики создают вещи. Я просто хорошо разбираюсь в коде. Я строил вещи, но не на регулярной основе; и не со знанием реальных разработчиков, как выпускник компьютерных наук, не имеющий сильного направления и просто пытающийся встать на свои финансовые ноги, чтобы он мог уехать из дома своей бабушки и жить гораздо счастливее.
Я склонен подбирать то, что мне нужно и/или о чем меня просят. Я узнал о широком спектре инструментов и ролей, которые может занимать “разработчик”. Там много чего есть, и будь я проклят, если от меня ожидают, что я изучу такие мусорные цепочки инструментов, как “React.js” это полностью противоречит всему моему подходу к минимизации дерьма.
Недавно я подал заявку на то, чтобы попасть на платформу определенного веб-сайта, и после случайной беседы с инженером меня попросили построить “небольшой” (для меня в то время он не был маленьким) бэкенд-проект. Вам даны некоторые конечные точки REST, подробные сведения о том, как это должно работать (хотя и недостаточно подробностей), и некоторые примеры ввода/вывода для управления вещами. Вам дают подсказки о дизайне объекта. Вам решать, как его построить.
Поэтому, поскольку я люблю Python и хотел, чтобы все было “гибким”, я решил изучить что-то под названием “Колба”.
Ниже приведены в значительной степени дезорганизованные личные заметки из проекта. На самом деле именно так я работаю, когда строю и изучаю вещи. Это будет выглядеть немного “рассеянно”, потому что именно так я размышляю о себе во время работы. Я как бы “общаюсь” с самим собой через блог markdown. Я на самом деле не очень много “разговариваю” с собой, кроме как с помощью текста и почерка.
Для этого проекта я зашел в блог heavy .
Я изменил имена конечных точек REST и удалил URL-адреса, которые намекают на проект. Я думаю, что было бы очень “неправильно” ожидать, что я НЕ поделюсь своими исследованиями и недавно приобретенными инструментами и навыками с остальным миром, поэтому от меня этого нельзя ожидать, поэтому я проявил должную осмотрительность, чтобы скрыть любые “значимые” детали.
Я с нетерпением жду будущих сообщений в блоге и развития своих навыков пользователя Python…программист, разработчик и хакер, а также создавать вещи для других, чтобы я мог получать деньги и переезжать в лучшую среду, чтобы я мог быть счастливым и довольным…ну, тем более
Refresh JWT POST /some-token-endpoint/refresh ----- User login POST /some-token-endpoint ----- Log out current user DELETE /some-token-endpoint ----- Get current user's info GET /myinfo ----- Create idea POST /getideas ----- Delete idea DELETE /getideas/:id ----- Get a page of ideas (1 page = 10 ideas) GET /getideas ----- Update idea PUT /getideas/:id ----- User Signup POST /getusers
Это кажется достаточно простым, но самое трудное-просто начать. Мы можем использовать flask для определения каждой из конечных точек API. Мы не перечисляем его в API, но подразумевается страница входа в |//.
Текущий день и время: Сб 23 февраля 2019 22:55 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 12m 30s Общее затраченное время: 12m30s
При каждом новом обновлении/записи в этом блоге мы будем добавлять текущий день/время, дату доставки, а также текущее и общее затраченное время
Полезные ссылки для этого проекта
- удалено для защиты проекта
- удалено для защиты проекта
- удалено для защиты проекта
- удалено для защиты проекта
Текущий день и время: Пн 25 февраля 2019 01:33 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 1 час 20 минут Общее затраченное время: 1 час 32 минуты
Созданы начальные страницы.
/ /user_registration /getusers /some-token-endpoint
Скоро Тодо:
- Обработка регистрации пользователей
- первоначальное создание базы данных
- обновление базы данных
- Обработка входа пользователя в систему
- Обработка выхода пользователя из системы
Продолжающийся…
Каким-то образом моя колба больше не связана с Python, и у меня установлено слишком много версий, поэтому я собираюсь потратить время на очистку своих установок Python, удалив существующие, а затем установив их с нуля с помощью brew.
Текущий день и время: Пн 25 февраля 2019 23:46 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 44m 01s Общее затраченное время: 1hr44m33m
Я исправил настройку колбы…съел немного времени…И Python3 тоже.
Я переместил часть кода, но не добился большого прогресса.
Мне нужно провести некоторые исследования о том, как обрабатывать регистрацию пользователей и как хранить данные в базе данных.
Сейчас мы потратим на это время.
Итак, хорошая идея-это шаблоны.
Мы должны сделать это сейчас.
Хорошо, нам удалось плавно перейти к системе шаблонов страниц, и кажется естественным создавать страницы и управлять ими таким образом.
Нам все еще нужно создать начальную таблицу пользователей и решить, как мы будем хранить идеи для каждого пользователя.
user table: user_id - email - password_hash
user_id
может ссылаться на другое содержимое таблицы, чтобы мы могли хранить идеи, возможно, в объекте blob или что-то в этом роде?
Я не уверен, каков “лучший” способ сделать это, поэтому мне придется разобраться в этом.
Текущий день и время: Вт 26 февраля 2019 00:14 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 24m08s Общее затраченное время: 2hr08m41m
Установлен колба-wtf
.
Перемещал вещи, чтобы быть более “правильным”.
Структура приложения:
xxxxx/ config.py xxxxx.py run.sh app/ __init__.py routes.py templates/ index.html user_registration.html users.html
Все по-прежнему строится и работает нормально.
Нам все еще нужно зарегистрироваться, но мы следуем учебнику.
Надо почитать, прежде чем мы нырнем.
Проверка времени.
Текущий день и время: Чт 28 февраля 2019 02:21 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 28m 11s Общее затраченное время: 2hr36m52m
Немного углубился в строительные формы.
Фактический объект LoginForm ().
Текущий день и время: Чт 28 февраля 2019 02:48 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 25m 47s Общее затраченное время: 3hr01m39m
Мы немного продвинулись вперед, но теперь реализуем сообщения об ошибках, когда пользователь вводит неверные данные формы.
Форма входа()
и Регистрационная форма()
.
Делаю перерыв, чтобы поспать.
Текущий день и время: Чт 28 февраля 2019 03:28 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 39m 12s Общее затраченное время: 3hr40m51m
My xxxxx: ______________________________ usermode: 10 trial: 10 continental: 10 averaje: 10 OK Cancel
Я, НАКОНЕЦ, продвинулся через раздел базы данных учебника:
Я создал User
и Idea
“модель”, которая в основном является определением таблицы.
Чтобы исправить БД, когда мы меняем дерьмо:
flask db migrate flask db upgrade
Когда вы вносите изменения, вы можете комментировать их
flask db migrate -m "your comment"
Теперь, когда мы это сделали, мы готовы начать работать с логинами:
Мы много работали, и поэтому нам следует сделать перерыв.
Текущий день и время: Чт 28 февраля 2019 22:06 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 1 час 42 минуты 57 секунд Общее затраченное время: 4 часа 23 минуты 48 секунд
Текущая разница:
исправлена куча дерьма, когда я работал над учебником по входу в систему, что-то сломалось, но оказалось, что эти два импорта вызывают ошибки в следующей строке в другом файле, когда я пытаюсь импортировать что-то из __init__.py
.
Текущий день и время: Пт 1 марта 2019 02:46 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее время: 1 час 29 минут 23 секунды Общее время: 5 часов 53 минуты 11 секунд
Нам все еще нужно проверить оболочку и войти в систему с этого уровня.
Тьфу дерьмо сломано
ДА
У НАС ВЗЛЕТ!!!
Я протестировал форму входа в систему, и она работает, как и ожидалось.
Это снова какое – то волнение!
Мы можем сделать перерыв. Нужно очистить голову и подготовиться к следующим шагам.
Текущий день и время: Пт 1 марта 2019 03:29 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 40m 48s Общее затраченное время: 5hr04m36s
Следующие шаги:
- Регистрация пользователя легко
- Воплощайте идеи в жизнь
- Добавьте идею
- Удалить идею
- Отображение идей
Ладно, пора выкинуть это дерьмо из головы! Регистрация пользователя! У нас это работает. Вы можете немедленно создать нового пользователя и немедленно войти в систему с ним. Идеалист-это все, что остается. Давайте остановимся и продолжим.
Текущий день и время: Пт 1 марта 2019 23:36 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее время: 22m 48s Общее время: 5hr28m04s
- Воплощайте идеи в жизнь
- Добавьте идею
- Удалить идею
- Отображение идей
При успешной регистрации пользователя мы должны перевести его на страницу “Мои идеи”.
Я думаю, что на самом деле мне нужно реализовать только конечные точки, а не сами страницы -_-
упс!
Хорошо…
Давайте все перестроим.
Сначала я регистрирую пользователя.
Если я смогу проверить это в curl…сначала мне нужно исправить curl…заварите завиток…
Хорошо…
Отчет о ходе работы:
У меня есть POST/get users
, отражающие наши входные данные.
Нам нужно, чтобы он вычислял токен jwt
и refresh_token
и возвращал его в виде json.
{ "jwt" : "...", "refresh_token" : "..." }
Похоже, для этого мы можем использовать Flask-JWT
.
Похоже, для этого мы можем использовать || Flask-JWT||.
У меня он установлен и вроде как встроен в routes.py
но я ошибаюсь при попытке аутентификации в /auth
…
./run.sh * Serving Flask app "xxxxx.py" * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) [2019-03-02 02:56:46,265] ERROR in app: Exception on /auth [POST] Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise raise value File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/usr/local/lib/python3.7/site-packages/flask_jwt/__init__.py", line 115, in _default_auth_request_handler username = data.get(current_app.config.get('JWT_AUTH_USERNAME_KEY'), None) AttributeError: 'NoneType' object has no attribute 'get' 127.0.0.1 - - [02/Mar/2019 02:56:46] "POST /auth HTTP/1.1" 500 -
Это похоже на возможную ошибку в Flask_JWT, но я не могу быть уверен на 100%…
Поскольку все это занимает у меня так много времени, я попросил их еще 4 дня поработать над этим. Если я буду усердно молоть, то смогу сделать это за 4 дня.
Дело в том, что в данный момент эта часть представляет собой блокпост…
Даже если бы мне пришлось вернуться/начать с нуля, перестроить все в минимальной колбе, когда я доберусь до этой части, мне все равно придется решить, как сгенерировать JWT…
Flask_JWT должен был решить эту проблему для меня, но даже использовать его немного сложно…
Я вбираю в себя много новой информации, и это требует некоторой умственной обработки с моей стороны.
Итак, подведем итог:
/getusers is reflecting our json post data now /auth is crashing for Flask_JWT
Текущий день и время: Сб 2 марта 2019 03:03 Дата доставки: Сб 2 марта 2019 06:35 утра Текущее затраченное время: 1 час 50 минут 01 с Общее затраченное время: 7 часов 18 минут 05 с
Обновление статистики:
Текущий день и время: Ср 6 марта 2019 14:29 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее затраченное время: 0hr0m0s Общее затраченное время: 7hr18m05s
Нам было предоставлено продление.
Проверьте это:
Нам нужно перезапустить это с нуля, мы перестроили.
User Signup: POST /getusers Refresh JWT: POST /some-token-endpoint/refresh User login: POST /some-token-endpoint Log out: DELETE /some-token-endpoint Get current user's info: GET /myinfo Create idea: POST /getideas Delete idea: DELETE /getideas/:id Get a page of ideas (1 page = 10 ideas): GET /getideas Update idea: PUT /getideas/:id
Для каждого доступного метода:
- Регистрация пользователя
- Обновить JWT
- Логин пользователя
- Выход пользователя из системы
- Получить информацию о текущем пользователе
- Создайте идею
- Удалить идею
- Получите страницу идей
- Обновление идеи
Нам нужно будет заново создать базу данных.
class User: name email password_hash class Idea: user_id text usermode trial continental averaje UserTable IdeaTable
Первый коммит. Привет, мир.
Текущий день и время: Ср 6 марта 2019 14:49 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr8m12s Общее время: 7hr26m17s
Далее нам нужно будет снова создать базу данных и таблицы.
Сделано.
Текущий день и время: Ср 6 марта 2019 15:19 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее затраченное время: 0hr23m49s Общее затраченное время: 7hr50m06s
Далее, фактически реализуя каждую функциональность. Логически мы должны начать с регистрации пользователя .
Регистрация пользователя
- Проанализируйте входные данные
- Проверка входных данных
- Передать проверенные входные данные новому объекту пользователя
- зафиксировать пользователя в БД
- Постройте JWT и верните необходимые токены
Проверка входных данных.
Текущий день и время: Ср 6 марта 2019 23:05 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr28m0s Общее время: 8hr18m06s
Впервые я услышал о flask_jwt
.
Затем я услышал о flask_jwt_extended
.
Затем я услышал о flask_jwt_auth
Все эти учебники-сплошная боль!
О, ЧЕРТ, ЭТО ЧЕРТОВСКИ РАБОТАЕТ, МЫ ГЕНЕРИРУЕМ JWT!!!
Волшебный соус-это
retval = { 'access_token' : create_access_token(identity=u.id), 'refresh_token' : create_refresh_token(identity=u.id) }
На самом деле мы возвращаем как JWT, так и refresh_token.
Мой главный вопрос по-прежнему заключается в том, как работает refresh_token
в первую очередь, это не объясняется во введении JWT, но я все еще должен знать, что это такое и как это работает, когда я его отправляю…
Ах да, есть какой-то декоратор, например @refresh_token_required
или что-то в этом роде.
Это взято из библиотеки flask_jwt_extended
так что спасибо вам за то, что вы здесь мой спаситель.
У нас все еще есть все другие API для реализации, но регистрация пользователя
официально ЗАВЕРШЕНА!
Для каждого доступного метода:
1. Регистрация пользователя завершена 2. Обновить JWT 3. Войти в систему пользователя 4. Выйти из системы пользователя 5. Получить информацию о текущем пользователе 6. Создать идею 7. Удалить идею 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Чт 7 марта 2019 года 23:30 Дата доставки: Пт 8 марта 2019 года 11:59 вечера Текущее затраченное время: 1ч 31м 02с Общее затраченное время: 9ч 49м08с
Примечание для себя:
Причина, по которой у нас было так много проблем с получением SECRET_KEY, заключалась в том, что мы настраивали наше приложение из определенного объекта, называемого Config. Чтобы решить эту проблему, нам пришлось переместить SECRET_KEY и JWT_SECRET_KEY в определение класса.
Давайте войдем в систему. Это должно быть легко.
Mar 8 1:57am: TIL Flask routes expect to return Responses or strings, tuples, etc, but not Dicts!
Похоже, вход в систему завершен.
Мы могли бы потратить несколько минут на очистку отладочных сообщений.
1. Регистрация пользователя завершена 2. Вход пользователя ЗАВЕРШЕН 3. Обновление JWT 4. Выход пользователя из системы 5. Получение информации о текущем пользователе 6. Создание идеи 7. Удаление идеи 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Чт 8 марта 2019 02:13 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr55m11s Общее время: 10hr44m19s
Токен обновления:
POST /some-token-endpoint/refresh
{'jwt': '', 'refresh_token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTIwMzA5OTcsIm5iZiI6MTU1MjAzMDk5NywianRpIjoiYjBjOGNhNDMtZmQzYi00OWI5LWFjM2YtZmU4ZWU0YjljY2UyIiwiZXhwIjoxNTUyMDMxNTk3LCJpZGVudGl0eSI6MSwidHlwZSI6InJlZnJlc2gifQ.9Akh0uY4ou8DBarkp2lDqS38dlIebqnwk0ss3J5B05s'}
JWT="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTIwMzA5OTcsIm5iZiI6MTU1MjAzMDk5NywianRpIjoiMWQ5NmU4MGQtOWQyZi00Mjg2LWEyMzItNGYxNDY5NjI5MGYyIiwiZXhwIjoxNTUyMDMxODk3LCJpZGVudGl0eSI6MSwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.HyMCR5mFdcoUi7VUjA3LeiTDGn8Ccsy08Y9Bbc0LL9M" REFRESH_TOKEN="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTIwMzA5OTcsIm5iZiI6MTU1MjAzMDk5NywianRpIjoiYjBjOGNhNDMtZmQzYi00OWI5LWFjM2YtZmU4ZWU0YjljY2UyIiwiZXhwIjoxNTUyMDMxNTk3LCJpZGVudGl0eSI6MSwidHlwZSI6InJlZnJlc2gifQ.9Akh0uY4ou8DBarkp2lDqS38dlIebqnwk0ss3J5B05s" ./curl_refresh.sh "$JWT" "$REFRESH_TOKEN"
Похоже, мы успешно возвращаем новые JWT!!!
Примечание для себя, чтобы спасти себя от будущих неприятностей:
JWT_HEADER_NAME JWT_HEADER_TYPE
Множество опций конфигурации в flask-jwt-extended
1. Регистрация пользователя завершена 2. Вход пользователя ЗАВЕРШЕН 3. Обновление JWT 4. Выход пользователя из системы 5. Получение информации о текущем пользователе 6. Создание идеи 7. Удаление идеи 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Пт 9 марта 2019 02:51 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr35m23s Общее время: 11hr19m42s
Выход из системы
Похоже, мы это сделали.
1. Регистрация пользователя завершена 2. Вход пользователя ЗАВЕРШЕН 3. Обновление JWT 4. Выход пользователя из системы 5. Получение информации о текущем пользователе 6. Создание идеи 7. Удаление идеи 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Пт 8 марта 2019 04:56 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr20m08s Общее время: 11hr39m50s
Получить информацию о текущем пользователе было очень просто. Мы все еще должны что-то сделать с этим URL-адресом граватара. Мы можем вернуться к этому.
1. Регистрация пользователя завершена 2. Вход пользователя ЗАВЕРШЕН 3. Обновление JWT 4. Выход пользователя из системы 5. Получение информации о текущем пользователе 6. Создание идеи 7. Удаление идеи 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Пт 8 марта 2019 05:10 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr10m44s Общее время: 11hr50m34s
Создайте идею
Пока все хорошо…
1. Регистрация пользователя завершена 2. Вход пользователя ЗАВЕРШЕН 3. Обновление JWT 4. Выход пользователя из системы 5. Получение информации о текущем пользователе 6. Создание идеи 7. Удаление идеи 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Пт 8 марта 2019 06:08 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr51m00s Общее время: 12hr41m34s
Удалить идею
- Убедитесь, что идентификатор идеи действителен и существует
- Удалите идею из БД
Дерьмо…
Как создать динамические маршруты с идентификаторами в колбе???
Хорошо выглядеть.
Я чертовски голоден.
1. Регистрация пользователя завершена 2. Вход пользователя ЗАВЕРШЕН 3. Обновление JWT 4. Выход пользователя из системы 5. Получение информации о текущем пользователе 6. Создание идеи 7. Удаление идеи 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Пт 8 марта 2019 06:25 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr15m00s Общее время: 12hr56m34s
Мы взяли пару выходных, но
сначала войдите в систему, а затем передайте JWT в/get ideas
{'jwt': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTIyMzkzMDMsIm5iZiI6MTU1MjIzOTMwMywianRpIjoiYzc3NGIyZWUtZTVmZi00ZTUzLWI2ZjktYjAyNDkxZWI1ZDI4IiwiZXhwIjoxNTUyMjQwMjAzLCJpZGVudGl0eSI6MSwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.NJDvj57c_hxqoqt5N_0zPYFHqxJOOjhMdAaQ_jIIcR4', 'refresh_token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTIyMzkzMDMsIm5iZiI6MTU1MjIzOTMwMywianRpIjoiNzc5ZDYzZTctZjM0Ni00MjQ1LWFlMTEtODkwMDM0OGQ3OWYyIiwiZXhwIjoxNTUyMjM5OTAzLCJpZGVudGl0eSI6MSwidHlwZSI6InJlZnJlc2gifQ.xX9a60sgVZ01OHjFwSPFF8EV-E_oS1YBfLiglGECYL4'}
Мы пытаемся вернуть наши идеи в виде json.
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py", line 179, in default raise TypeError(f'Object of type {o.__class__.__name__} ' TypeError: Object of type Idea is not JSON serializable
Итак, как мы можем сделать объект в Python JSON сериализуемым?
Один из обходных путей, который я получил, – это вызов .serialize (), как только он определен.
retval = jsonify([idea.serialize() for idea in idea_page.items])
Я думаю, что это завершает все!
1. Регистрация пользователя завершена 2. Вход пользователя ЗАВЕРШЕН 3. Обновление JWT 4. Выход пользователя из системы 5. Получение информации о текущем пользователе 6. Создание идеи 7. Удаление идеи 8. Получить страницу идей 9. Обновить идею
Текущий день и время: Вс 10 марта 2019 13:54 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr20m00s Общее время: 13hr16m34s
СДЕЛАНО!!!
Текущий день и время: Вс 10 марта 2019 14:53 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr17m30s Общее время: 13hr34m04s
Ладно, кажется, это все.
Мы опустили URL-адрес граватара.
Сейчас у нас недостаточно времени, чтобы подать заявку, но в основном мы закончили.
- Создайте частный репозиторий Github или Bitbucket для окончательной отправки кода
- Добавьте нашу учетную запись Github или Bitbucket в свой репозиторий
- Разверните свой код в онлайн-версии
- Напишите нам по электронной почте со следующей информацией:
- Тема электронной почты:
- Небольшой Бэк-Энд Проект: xxxxx
- Ваше имя
- Ссылка на ваш репозиторий
- Ссылка на сервер API, по которой мы можем получить доступ и протестировать
https://en.gravatar.com/site/implement/images/
- Вычислить хэш электронной почты
- URL://www.gravatar.com/avatar/HASH
https://en.gravatar.com/site/implement/hash/
echo md5( strtolower( trim( "MyEmailAddress@example.com " ) ) );
Давайте преобразуем это в Python.
python3 import hashlib email = 'youremail@example.com' a = hashlib.md5(email.lower().encode()) a.hexdigest()
Это то, чего мы хотим.
gravURL = 'https://www.gravatar.com/avatar/' + str(a.hexdigest())
Нам нужно, чтобы это произошло при регистрации пользователя.
Это в routes.py
.
Для этого нам нужно обновить определение User
в models.py
файл.
Или, может быть, мы могли бы возвращать его каждый раз?
Может быть, нам удастся избежать обновления модели.
Примечание для себя: проверьте тип перед принудительным приведением. На самом деле используйте свой мозг при написании кода. Я знаю, что нам нужно покончить с этим дерьмом.
Я ожидал этого, имея поле в getCurrentUserInfo
.
Проблема решена.
Время подачи заявки.
- Создание частного github
примечание: время зеленого чая
сделано
- Разверните наш код в онлайн-версии
Мы собираемся опробовать метод local tunnel
, это кажется наименьшей проблемой. Мне не хочется сегодня изучать Хероку или что-то в этом роде.
Современный местный тоннель:
Команда lt
теперь.
Дерьмо…только что понял, что мне придется установить много зависимостей -_-;...
sudo apt install python3-flask -y python3-flask-sqlalchemy python3-flask-migrate python3-flask-jwt-extended sudo apt install python3-pip pip install setuptools pip install flask-jwt-extended
Хорошо, он работает на моем сервере.
Похоже, мы должны сделать это вместо этого:
Я очень устал. Мы сделаем это утром на совершенно новом сервере.
Текущий день и время: Ср 13 марта 2019 4:39 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 1 час 40 минут 41 сек Общее время: 15 часов 14 минут 04 сек
Вернемся к этому ночью, лол. фффф
Запуск сервера для размещения этой штуки.
Иду по маршруту apache mod_wsgi.
Перво-наперво обезопасьте сервер.
Сделано.
Затем установите зависимости.
sudo apt-get install python3-pip \ python3-flask \ python3-flask-sqlalchemy \ python3-flask-migrate -y pip3 install setuptools pip3 install flask-jwt-extended
Сделано.
Теперь все, что осталось, – это переместить код приложения в соответствующий каталог и начать настройку wsgi.
Текущий день и время: Ср 13 марта 2019 22:31 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 0hr20m00s Общее время: 15hr34m04s
Это слишком сложно… Я прошел через все шаги, но продолжаю сталкиваться с 500 ошибками, когда пытаюсь его обслужить. Я бросаю полотенце. Ждать… ЕГО ПОДАЮТ!!! МЫ СДЕЛАЛИ ЭТО!!!
- Это слишком сложно… Я прошел через все шаги, но продолжаю сталкиваться с 500 ошибками, когда пытаюсь его обслужить. Я бросаю полотенце. Ждать… ЕГО ПОДАЮТ!!! МЫ СДЕЛАЛИ ЭТО!!!
- Это слишком сложно… Я прошел через все шаги, но продолжаю сталкиваться с 500 ошибками, когда пытаюсь его обслужить. Я бросаю полотенце. Ждать… ЕГО ПОДАЮТ!!! МЫ СДЕЛАЛИ ЭТО!!!
- Это слишком сложно… Я прошел через все шаги, но продолжаю сталкиваться с 500 ошибками, когда пытаюсь его обслужить. Я бросаю полотенце. Ждать… ЕГО ПОДАЮТ!!! МЫ СДЕЛАЛИ ЭТО!!!
- Это слишком сложно… Я прошел через все шаги, но продолжаю сталкиваться с 500 ошибками, когда пытаюсь его обслужить. Я бросаю полотенце. Ждать… ЕГО ПОДАЮТ!!! МЫ СДЕЛАЛИ ЭТО!!!
- Это слишком сложно… Я прошел через все шаги, но продолжаю сталкиваться с 500 ошибками, когда пытаюсь его обслужить. Я бросаю полотенце. Ждать… ЕГО ПОДАЮТ!!! МЫ СДЕЛАЛИ ЭТО!!!
НАКОНЕЦ-ТО ПРЕДСТАВИЛИ ВСЕ
ПОСЛЕДНИЙ ЖУРНАЛ ВРЕМЕНИ!!!
Текущий день и время: Чт 14 марта 2019 2:59 Дата доставки: Пт 8 марта 2019 11:59 вечера Текущее время: 1 час 02 минуты 00 минут Общее время: 16 часов 36 минут 04 минуты
В течение примерно 2-3 недель удалось выжать 16 часов дополнительного “времени”, которое было потрачено на изучение фреймворка “Колба” в реальной манере, похожей на crashcourse.
Однако.
Теперь я могу разрабатывать и развертывать веб-приложения через Flask и mod_wsgi с помощью входа в токен JWT.
Есть много работы по форматированию этого блога материалов, потому что он действительно хаотичен/рассеян, но я думаю, что многие люди найдут это полезным и интересным.
Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге
- Все URL-адреса в этом блоге