ПРЕДУПРЕЖДЕНИЕ: Сырой язык используется. Иногда у меня грязный рот. Не читайте, если вам не нравится видеть использование языка для взрослых. Я здесь сырой и нефильтрован, как и в реальной жизни!
Примечание всем, кто интересуется метриками: Sh*T появляется 7 раз, f*ck появляется дважды.
Я в первую очередь кодер. Мне заплатили Dev, например, приложение для iOS. Мне также заплатили за исправление ошибок в больших корпоративных приложениях для iOS. Мне также заплатили за написание сценариев Python и выполнить пентесты в iOS, Android и веб -приложениях.
Существует мир различий между моим набором навыков и навыками «реальных разработчиков».
Фактические разработчики строят вещи. Я просто хорош в коде. Я строил вещи, но не на обычном; Ни со знанием реальных разработчиков так сильно, как выпускник компьютерных наук без сильного направления и просто пытаясь вернуться на свои финансовые ноги, чтобы он мог вырваться из дома своей бабушки и жить гораздо более счастливой жизнью.
Я склонен забрать то, что нужно, и/или просить меня. Я узнал о широком спектре инструментов и ролей, которые может занять «разработчик». Там много, и я буду проклят, если бы я ожидал изучать мусорные инструменты, такие как «React.js», которые полностью противоречат всем моему подходу к минимальному дерьму.
Недавно я подал заявку, чтобы попасть на платформу определенного веб -сайта, и после повседневного чата с инженером меня попросили создать «маленький» (для меня, он не был маленьким в то время) Бэкэнд. Вам дают некоторые конечные точки REST, подробности о том, как это должно работать (хотя, недостаточно деталей), и некоторый пример ввода/вывода для управления вещами. Вам дают намеки на дизайн объекта. Вам решать, как его построить.
Итак, потому что я люблю Python и хотел сохранить «гибкую», я решил выучить что -то, что называется «колба».
Ниже приведены в значительной степени неорганизованные личные заметки из проекта. Это на самом деле то, как я работаю при создании и изучении вещей. Это станет немного «разбросанным», потому что именно так я размышляю над собой во время работы. Я вроде как «болтает» с собой через блог. Я не очень “не говорю” о себе, кроме как через текст и почерк.
Для этого проекта я вошел Блог тяжелый Анкет
Я изменил имена конечных точек 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
Это кажется достаточно простым, только начало работы – это сложная часть. Мы можем использовать колбу, чтобы определить каждую из конечных точек API. Мы не перечислим его в API, но есть подразумеваемая страница входа в /
Анкет
Текущий день и время: Сб 23 февраля 2019 г. 22:55 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 12m30s Общее время, потраченное: 12m30S
При каждом новом обновлении/входе в этот блог мы будем готовить к текущему дню/времени, дате доставки, а также текущее и общее время потраченное время
Полезные ссылки для этого проекта
- Удален для защиты проекта
- Удален для защиты проекта
- https://jwt.io/introduction/
- https://tools.ietf.org/html/rfc7519
Текущий день и время: Пн 25 февраля 2019 г. 01:33 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 1HR20M Общее время, потраченное: 1HR32M
Начальные страницы созданы.
/ /user_registration /getusers /some-token-endpoint
Тодо скоро:
- Обрабатывать регистрацию пользователя
- Начальное создание базы данных
- Обновление базы данных
- Обрабатывать пользовательский вход
- Обрабатывать вход пользователей
Продолжение …
Каким -то образом моя колба больше не связана с Python, и у меня есть слишком много версий, поэтому я собираюсь потратить время, чтобы очистить свои установки Python, удалив существующие, а затем установив с нуля через Brew.
Текущий день и время: Пн 25 февраля 2019 г. 23:46 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 44M01S Общее время, потраченное: 1HR44M33M
Я исправил настройку колбы … съел немного времени … Python3 также.
Я переместил часть кода, но не добился большого прогресса.
Мне нужно провести некоторое исследование о том, как обрабатывать регистрацию пользователей и как сохранить данные в базе данных.
Мы будем проводить время на это сейчас.
Итак, хорошая идея – шаблоны.
Мы должны сделать это сейчас.
Хорошо, нам удалось плавно переходить на систему страницы шаблона, и это естественно создавать и управлять страницами таким образом.
Нам все еще нужно создать начальную таблицу пользователей и определить, как мы собираемся хранить идеи для каждого пользователя.
user table: user_id - email - password_hash
user_id
Можно ли ссылаться на другой контент таблицы, чтобы мы могли спрятать идеи, возможно, в объекте Blob или что -то в этом роде?
Я не уверен, что такое «лучший» способ сделать это, поэтому мне придется изучить это.
Текущий день и время: Вт 26 февраля 2019 г. 00:14 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 24m08s Общее время, потраченное: 2HR08M41M
Установлен Flask-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 Текущее время, проведенное: 28m11s Общее время, потраченное: 2HR36M52M
Пошел немного глубже в формы строительства.
Фактический объект loginform ().
Текущий день и время: Чт 28 февраля 2019 02:48 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 25m47s Общее время, потраченное: 3HR01M39M
Мы немного прогрессировали, но теперь в реализации сообщений об ошибках, когда пользователь вводит неверные данные формы.
LoginForm ()
и RegistrationForm ()
Анкет
Сделать перерыв, чтобы спать.
Текущий день и время: Чт 28 февраля 2019 03:28 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 39m12s Общее время, потраченное: 3HR40M51 m
My xxxxx: ______________________________ usermode: 10 trial: 10 continental: 10 averaje: 10 OK Cancel
Я наконец прошел через раздел базы данных учебника:
Я создал Пользователь
и Идея
«Модель», которая в основном является определением таблицы.
Чтобы исправить БД, когда мы меняем дерьмо:
flask db migrate flask db upgrade
Когда вы вносите изменения, вы можете прокомментировать
flask db migrate -m "your comment"
Теперь, когда мы сделали, мы готовы начать работать с входами в систему:
Мы усердно работали, и поэтому мы должны сделать перерыв.
Текущий день и время: Чт 28 февраля 2019 г. 22:06 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 1HR42M57S Общее время, потраченное: 4HR23M48S
Ток различия:
Исправлена куча дерьма, когда я работаю над учебником для входа, что -то сломалось, но это оказалось, что эти два импорта, вызывающие ошибки в следующей строке в другом файле, когда я пытаюсь что -то импортировать из __init__.py
Анкет
Текущий день и время: Пт 1 марта 2019 02:46 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 1HR29M23S Общее время, потраченное: 5HR53M11S
Нам все еще нужно проверить оболочку и войти в систему с этого уровня.
Тьфу дерьмо сломано:(
ДА
У нас есть подъем !!!
Я проверил форму входа в систему, и она работает, как и ожидалось.
Это снова захватывающе!
Мы можем сделать перерыв. Нужно очистить голову и подготовиться к следующим шагам.
Текущий день и время: Пт 1 марта 2019 03:29 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 40m48s Общее время, потраченное: 5HR04M36S
Следующие шаги:
- Регистрация пользователя легко
- Реализуйте идеи вещи
- Добавить идею
- Удалить идею
- Показать идеи
Хорошо, время размолоть это дерьмо! Регистрация пользователя! У нас это работает. Вы можете немедленно создать нового пользователя и немедленно войти с ними. Список идей – это все, что остается. Давайте контролируем и продолжим.
Текущий день и время: Пт 1 марта 2019 г. 23:36 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 22m48s Общее время, потраченное: 5HR28M04S
- Реализуйте идеи вещи
- Добавить идею
- Удалить идею
- Показать идеи
При успешной регистрации пользователя мы должны перенести пользователя на страницу «Мои идеи».
Я думаю, что мне действительно нужно только внедрить конечные точки, а не сами страницы -_-
Упс!
В порядке…
Давайте переоценим вещи.
Сначала я занимаюсь регистрацией пользователя.
Если я смогу проверить это в curl … сначала мне нужно исправить Curl … Brew curl …
В порядке…
Отчет о прогрессе:
У меня есть Post/getUsers
отражая наши входные данные.
Нам нужно, чтобы вычислить jwt
токен и refresh_token
и вернуть его как json.
{ "jwt" : "...", "refresh_token" : "..." }
Похоже, мы можем использовать Flask-jwt
для этого.
https://pythonhosted.org/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 Текущее время, проведенное: 1HR50M01S Общее время, потраченное: 7HR18M05S
Обновление статистики:
Текущий день и время: Ср 6 марта 2019 г. 14:29 Дата доставки: Пт 8 марта 2019 г. 23: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 г. 23:59 Текущее время, проведенное: 0hr8m12s Общее время, потраченное: 7HR26M17S
Нам нужно снова создать базу данных и таблицы.
Готово.
Текущий день и время: Ср 6 марта 2019 г. 15:19 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR23M49S Общее время, потраченное: 7HR50M06S
Далее, фактически реализуя каждую функциональность. Мы должны логически начать с Регистрация пользователя Анкет
Регистрация пользователя
- Разобрать входные данные
- Проверьте входные данные
- Передайте проверенные вход в новый пользовательский объект
- Получите пользователя DB
- Построить JWT и возврат, требуемые токены
Проверка входов.
Текущий день и время: Ср 6 марта 2019 г. 23:05 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR28M0S Общее время, потраченное: 8HR18M06S
Сначала я слышал о flask_jwt
Анкет
Тогда я слышал о flask_jwt_extended
Анкет
Тогда я слышал о flask_jwt_auth
Все эти учебники – огромные боли!
О, дерьмо, это чертовски работает, мы генерируем jwts !!!
Волшебный соус
retval = { 'access_token' : create_access_token(identity=u.id), 'refresh_token' : create_refresh_token(identity=u.id) }
На самом деле мы получаем и jwt, и rebresh_token.
Мой главный вопрос все еще в том, как refresh_token
Работает в первую очередь, это не объясняется во вступлении в JWT, но я все еще ожидаю знать, что это такое и как это работает, когда я его отправляю …
О, верно, есть какой -то декоратор, как @refresh_token_required
или что-то.
Это происходит из библиотеки flask_jwt_extended
Так что спасибо за то, что вы здесь мой спаситель.
У нас все еще есть все другие API для реализации, но RegisterUser
официально сделан!
Для каждого доступного метода:
1. Пользовательская регистрация – сделано
- Обновить jwt
- Логин пользователя
- Отчет пользователя
- Получите информацию о текущем пользователе
- Создайте идею
- Удалить идею
- Получите страницу идей
- Обновите идею
Текущий день и время: Чт 7 марта 2019 г. 23:30 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 1HR31M02S Общее время, потраченное: 9hr49m08s
Примечание к себе:
Причина, по которой у нас было так много проблем с получением 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 Пользовательский вход – сделано
- Обновить jwt
- Отчет пользователя
- Получите информацию о текущем пользователе
- Создайте идею
- Удалить идею
- Получите страницу идей
- Обновите идею
Текущий день и время: Чт 8 марта 2019 02:13 Дата доставки: Пт 8 марта 2019 г. 23: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"
Похоже, мы успешно возвращаем новые JWTS !!!
Примечание к себе, чтобы спасти себя от будущих проблем:
JWT_HEADER_NAME JWT_HEADER_TYPE
Много вариантов конфигурации в флаке-JWT-расширенном
1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt
- Отчет пользователя
- Получите информацию о текущем пользователе
- Создайте идею
- Удалить идею
- Получите страницу идей
- Обновите идею
Текущий день и время: Пт 9 марта 2019 02:51 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR35M23S Общее время, потраченное: 11hr19m42s
Выйти
Похоже, мы сделали это.
1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя
- Получите информацию о текущем пользователе
- Создайте идею
- Удалить идею
- Получите страницу идей
- Обновите идею
Текущий день и время: Пт 8 марта 2019 04:56 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR20M08S Общее время, потраченное: 11hr39m50s
Получите информацию о текущем пользователе, это было супер. Нам все еще нужно что -то сделать с этой градатой. Мы можем вернуться к этому.
1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя 5 Получите информацию о текущем пользователе
- Создайте идею
- Удалить идею
- Получите страницу идей
- Обновите идею
Текущий день и время: Пт 8 марта 2019 05:10 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR10M44S Общее время, потраченное: 11hr50m34s
Создайте идею
Все идет нормально…
1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя 5 Получить информацию текущего пользователя 6 Создайте идею
- Удалить идею
- Получите страницу идей
- Обновите идею
Текущий день и время: Пт 8 марта 2019 06:08 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR51M00S Общее время, потраченное: 12HR41M34S
Удалить идею
- Убедитесь, что идентификатор идеи действителен и существует
- Удалить идею из БД
Дерьмо…
Как сделать динамические маршруты, в которых есть идентификаторы в колбе ???
Хорошо выглядеть.
Я чертовски голоден.
1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя 5 Получить информацию текущего пользователя 6 Создайте идею 7 Удалить идею
- Получите страницу идей
- Обновите идею
Текущий день и время: Пт 8 марта 2019 06:25 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR15M00S Общее время, потраченное: 12HR56M34S
Мы взяли пару выходных, но
Сначала войдите, затем передайте JWT/GetIdeas
{'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 serializable?
Один обходной путь, который я получил, – это позвонить .serialize () после его определения.
retval = jsonify([idea.serialize() for idea in idea_page.items])
Я думаю, что это завершает это!
1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя 5 Получить информацию текущего пользователя 6 Создайте идею 7 Удалить идею 8 Получите страницу идей
- Обновите идею
Текущий день и время: Солнце 10 марта 2019 г. 13:54 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR20M00S Общее время, потраченное: 13hr16m34s
СДЕЛАНО!!!
Текущий день и время: Солнце 10 марта 2019 г. 14:53 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR17M30S Общее время, потраченное: 13hr34m04s
Хорошо, это кажется все.
Мы пропустили gravatar url.
У нас нет достаточно времени, чтобы отправиться сейчас, но мы в основном закончили.
- Создайте частное хранилище GitHub или BitBucket для получения окончательного представления кода
- Добавьте нашу учетную запись GitHub или Bitbucket в свой репозиторий
- Развернуть свой код в онлайн -версии
- Напишите нам следующую информацию:
- Тема письма:
- Маленький задний проект: xxxxx
- Твое имя
- Ваша ссылка на хранилище
- Ссылка на сервер API, где мы можем получить доступ и тестировать
https://en.gravatar.com/site/implement/images/
- Рассчитайте хэш по электронной почте
- Url = https://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
Анкет
Чтобы сделать это, нам нужно обновить Пользователь
Определение в модели.py
файл.
Или мы могли бы вернуть это каждый раз?
Может быть, мы сможем избежать обновления модели.
Примечание к себе: проверьте тип перед принудительным составлением. На самом деле используйте свой мозг при написании кода. Я знаю, что нам нужно сделать дерьмо.
Я ожидал этого, имея поле в GetCurrentUserinfo
Анкет
Проблема решена.
Время отправки.
- Создайте частный GitHub
Примечание: Время зеленого чая
сделано
- Развернуть наш код в онлайн -версии
Мы собираемся попробовать Localtunnel
Метод, кажется, наименее хлопот. Мне не хочется изучать Heroku или что -то еще сегодня вечером.
Современный Localtunnel:
Команда 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 г. 23:59 Текущее время, проведенное: 1HR40M41S Общее время, потраченное: 15HR14M04S
Вернувшись ночью, лол. FFFF
Раскручивание сервера для размещения этой вещи.
Goin 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 г. 23:59 Текущее время, проведенное: 0HR20M00S Общее время, потраченное: 15HR34M04S
Это слишком сложно … Я прошел через все шаги, но продолжаю столкнуться с 500 ошибками, когда пытаюсь обслуживать это. Я бросаю полотенце. Ждать… Это служит !!! МЫ СДЕЛАЛИ ЭТО!!!
- https://www.bogotobogo.com/python/Flask/Python_Flask_HelloWorld_App_with_Apache_WSGI_Ubuntu14.php
- https://stackoverflow.com/questions/19344252/how-to-install-configure-mod-wsgi-for-py3
- https://www.linode.com/docs/websites/hosting-a-website-ubuntu-18-04/
- https://modwsgi.readthedocs.io/en/develop/installation.html
- http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
Наконец -то отправил все
Последний раз журнал !!!
Текущий день и время: Чт 14 марта 2019 г. 2:59 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 1HR02M00S Общее время, потраченное: 16HR36M04S
В течение примерно 2-3 недель удалось выпустить 16-часовое дополнительное «время», которое было потрачено на изучение структуры «колба» в реальном сбое, подобном углублению.
Однако.
Теперь я способен разработать и развернуть веб -приложения через Flask и MOD_WSGI с входом в систему токена JWT.
В форматировании этого блога материалов есть что сделать, потому что он действительно хаотичный/разбросанный, но я думаю, что многие люди найдут это полезным и интересным.
Все URL -адреса в этом блоге
- https://jwt.io/introduction/
- https://tools.ietf.org/html/rfc7519
- https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates
- https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database
- https://pythonhosted.org/Flask-JWT/
- https://flask-jwt-extended.readthedocs.io/en/latest/installation.html
- https://realpython.com/token-based-authentication-with-flask/
- https://flask-jwt-extended.readthedocs.io/en/latest/blacklist_and_token_revoking.html
- https://stackoverflow.com/questions/15117416/capture-arbitrary-path-in-flask-route
- https://stackoverflow.com/questions/21411497/flask-jsonify-a-list-of-objects
- http://flask.pocoo.org/docs/1.0/deploying/
- https://localtunnel.github.io/www/
- http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
- https://www.bogotobogo.com/python/Flask/Python_Flask_HelloWorld_App_with_Apache_WSGI_Ubuntu14.php
- https://stackoverflow.com/questions/19344252/how-to-install-configure-mod-wsgi-for-py3
- https://www.linode.com/docs/websites/hosting-a-website-ubuntu-18-04/
- https://modwsgi.readthedocs.io/en/develop/installation.html
- http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
Оригинал: “https://dev.to/therealdarkmage/platforms-python-practice-projects-and-picking-up-flask-a-blog-story–2mbl”