Рубрики
Без рубрики

Платформы, тренировочные проекты Python и собрание колбы: история блога

Мои сырые, нефильтрованные заметки из недавнего погружения в колбу Python. Tagged с Python, Flask, Python3, Backend.

ПРЕДУПРЕЖДЕНИЕ: Сырой язык используется. Иногда у меня грязный рот. Не читайте, если вам не нравится видеть использование языка для взрослых. Я здесь сырой и нефильтрован, как и в реальной жизни!

Примечание всем, кто интересуется метриками: 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

При каждом новом обновлении/входе в этот блог мы будем готовить к текущему дню/времени, дате доставки, а также текущее и общее время потраченное время

Полезные ссылки для этого проекта

Текущий день и время: Пн 25 февраля 2019 г. 01:33 Дата доставки: Сб 2 марта 2019 06:35 Текущее время, проведенное: 1HR20M Общее время, потраченное: 1HR32M

Начальные страницы созданы.

/
/user_registration
/getusers
/some-token-endpoint

Тодо скоро:

  1. Обрабатывать регистрацию пользователя
    • Начальное создание базы данных
    • Обновление базы данных
  2. Обрабатывать пользовательский вход
  3. Обрабатывать вход пользователей

Продолжение …

Каким -то образом моя колба больше не связана с 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

Для каждого доступного метода:

  1. Пользовательская регистрация
  2. Обновить jwt
  3. Логин пользователя
  4. Отчет пользователя
  5. Получите информацию о текущем пользователе
  6. Создайте идею
  7. Удалить идею
  8. Получите страницу идей
  9. Обновите идею

Нам нужно будет воссоздать базу данных.

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

Далее, фактически реализуя каждую функциональность. Мы должны логически начать с Регистрация пользователя Анкет

Регистрация пользователя

  1. Разобрать входные данные
  2. Проверьте входные данные
  3. Передайте проверенные вход в новый пользовательский объект
  4. Получите пользователя DB
  5. Построить 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. Пользовательская регистрация – сделано

  1. Обновить jwt
  2. Логин пользователя
  3. Отчет пользователя
  4. Получите информацию о текущем пользователе
  5. Создайте идею
  6. Удалить идею
  7. Получите страницу идей
  8. Обновите идею

Текущий день и время: Чт 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 Пользовательский вход – сделано

  1. Обновить jwt
  2. Отчет пользователя
  3. Получите информацию о текущем пользователе
  4. Создайте идею
  5. Удалить идею
  6. Получите страницу идей
  7. Обновите идею

Текущий день и время: Чт 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

  1. Отчет пользователя
  2. Получите информацию о текущем пользователе
  3. Создайте идею
  4. Удалить идею
  5. Получите страницу идей
  6. Обновите идею

Текущий день и время: Пт 9 марта 2019 02:51 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR35M23S Общее время, потраченное: 11hr19m42s

Выйти

Похоже, мы сделали это.

1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя

  1. Получите информацию о текущем пользователе
  2. Создайте идею
  3. Удалить идею
  4. Получите страницу идей
  5. Обновите идею

Текущий день и время: Пт 8 марта 2019 04:56 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR20M08S Общее время, потраченное: 11hr39m50s

Получите информацию о текущем пользователе, это было супер. Нам все еще нужно что -то сделать с этой градатой. Мы можем вернуться к этому.

1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя 5 Получите информацию о текущем пользователе

  1. Создайте идею
  2. Удалить идею
  3. Получите страницу идей
  4. Обновите идею

Текущий день и время: Пт 8 марта 2019 05:10 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR10M44S Общее время, потраченное: 11hr50m34s

Создайте идею

Все идет нормально…

1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя 5 Получить информацию текущего пользователя 6 Создайте идею

  1. Удалить идею
  2. Получите страницу идей
  3. Обновите идею

Текущий день и время: Пт 8 марта 2019 06:08 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR51M00S Общее время, потраченное: 12HR41M34S

Удалить идею

  • Убедитесь, что идентификатор идеи действителен и существует
  • Удалить идею из БД

Дерьмо…

Как сделать динамические маршруты, в которых есть идентификаторы в колбе ???

Хорошо выглядеть.

Я чертовски голоден.

1. Пользовательская регистрация – выполнено 2 Пользовательский вход – выполнен 3 Обновить jwt 4 Отчет пользователя 5 Получить информацию текущего пользователя 6 Создайте идею 7 Удалить идею

  1. Получите страницу идей
  2. Обновите идею

Текущий день и время: Пт 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 Получите страницу идей

  1. Обновите идею

Текущий день и время: Солнце 10 марта 2019 г. 13:54 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR20M00S Общее время, потраченное: 13hr16m34s

СДЕЛАНО!!!

Текущий день и время: Солнце 10 марта 2019 г. 14:53 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 0HR17M30S Общее время, потраченное: 13hr34m04s

Хорошо, это кажется все.

Мы пропустили gravatar url.

У нас нет достаточно времени, чтобы отправиться сейчас, но мы в основном закончили.

  1. Создайте частное хранилище GitHub или BitBucket для получения окончательного представления кода
  2. Добавьте нашу учетную запись GitHub или Bitbucket в свой репозиторий
  3. Развернуть свой код в онлайн -версии
  4. Напишите нам следующую информацию:
    • Тема письма:
    • Маленький задний проект: xxxxx
    • Твое имя
    • Ваша ссылка на хранилище
    • Ссылка на сервер API, где мы можем получить доступ и тестировать
https://en.gravatar.com/site/implement/images/
  1. Рассчитайте хэш по электронной почте
  2. 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 Анкет

Проблема решена.

Время отправки.

  1. Создайте частный GitHub

Примечание: Время зеленого чая

сделано

  1. Развернуть наш код в онлайн -версии

Мы собираемся попробовать 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 ошибками, когда пытаюсь обслуживать это. Я бросаю полотенце. Ждать… Это служит !!! МЫ СДЕЛАЛИ ЭТО!!!

Наконец -то отправил все

Последний раз журнал !!!

Текущий день и время: Чт 14 марта 2019 г. 2:59 Дата доставки: Пт 8 марта 2019 г. 23:59 Текущее время, проведенное: 1HR02M00S Общее время, потраченное: 16HR36M04S

В течение примерно 2-3 недель удалось выпустить 16-часовое дополнительное «время», которое было потрачено на изучение структуры «колба» в реальном сбое, подобном углублению.

Однако.

Теперь я способен разработать и развернуть веб -приложения через Flask и MOD_WSGI с входом в систему токена JWT.

В форматировании этого блога материалов есть что сделать, потому что он действительно хаотичный/разбросанный, но я думаю, что многие люди найдут это полезным и интересным.

Все URL -адреса в этом блоге

Оригинал: “https://dev.to/therealdarkmage/platforms-python-practice-projects-and-picking-up-flask-a-blog-story–2mbl”