Как зашифровать или замаскировать URL REST API в Django

Здравствуйте эксперты Django REST API,

Мы создаем портал университетских курсов, где приложение предлагает различные типы пользователей, такие как профессор, студенты и администраторы, используя DJANGO/REACT. Мы используем REST API для связи между бэкендом и фронтендом.

Итак, пока мы можем выполнять некоторые базовые операции, и это действительно работает отлично. Однако теперь мне нужна помощь этой группы, чтобы сделать следующее:

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

Для этого мы должны сделать следующее:

  • Модель для каждого курса, которая содержит содержание, описание и предпосылки для каждого курса.
  • Модель StudentCourseAck, которая имеет FK к курсу, поле Signed Boolean, бинарное поле для хранения подписанного документа.

Поток пользователей:

  • Студент входит на портал,
  • Выбирает курс, который генерирует запись StudentCourseAck.
  • Позвольте студенту просмотреть документ и подписать его (на стороне клиента с помощью sign pad).
  • Подпись сохраняется в PDF (как двоичное поле).

Пока все хорошо...

Теперь мы хотим расширить набор функций, позволяющих администратору отправить студенту ссылку на документ studentcouseack, если он не подписан до начала курса. Также эта ссылка должна быть действительна только в течение 48 часов, иначе срок ее действия истечет.

Итак, нам нужна помощь для расширения этих наборов функций следующим образом:

  • В настоящее время API выводится на фронтенд следующим образом: mysite.com/courseack/studentid/documentid
  • .
  • Однако мы хотим зашифровать это, чтобы ссылка выглядела так: mysite.com/uniqueid
  • .
  • Где uniquid сопоставлен с /studentid/documented

У меня есть следующий вопрос по проектированию:

  • Вопрос 1: Следует ли нам улучшить StudentCourseAck, который хранит UUID для каждого документа?
  • Вопрос 2: Если я буду хранить UUID для каждого документа, как мне сделать так, чтобы его срок действия истекал после создания документа?
  • Вопрос 3: Когда студент заканчивает подписывать документ, мне нужно обновить документ в базе данных, чтобы убедиться, что правильный документ сохранен в правильном профиле студента, как я могу обеспечить это требование безопасности.

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

Еще раз спасибо за ваше время и внимание.

Спасибо.

Любая другая альтернатива, которая проще и легче в обслуживании.

Помня вышеприведенную фразу, я предлагаю следующее решение. Сначала я не буду рассматривать это как проблему DRF, а как общую проблему и продолжу отвечать на ваши вопросы.

Простое решение заключается в 4 шагах

  1. Create a UUID field inside StudentCourseACK so that you can map this uuid with your url mysite.com/uniqueid, catch the document id inside the StudentCourseACK record as a foreign key and also create a created_at inside the model (this will be required for expiry timer)
  2. Make a view inside your views.py that takes this StudentCourseACK UUID as a url parameter where you will have to fetch courseack, studentid and documentid from this StudentCourseACK mapping table and redirects it to mysite.com/courseack/studentid/documentid. When you link this view with your url pattern make sure the listing is at the very bottom.
  3. To make an expiry timer you can check the created_at date in your StudentCourseAck record for 48hours limit before redirecting inside Step 2
  4. Finally when the student is redirected to the mysite.com/courseack/studentid/documentid endpoint you will have to follow a simple process of getting the StudentCourseAck data via .filter(studentid="some value", documentid="somevalue") and make changes to this data accordingly.

Еще одна вещь, которую я понимаю, это то, что вы можете полностью отказаться от длинного mysite.com/courseack/studentid/documentid url и переписать его логику внутри нового представления, но я предполагаю, что вы хотите оставить все как есть.

Вернуться на верх