Как создать конечную точку (GET) с отключенной аутентификацией, где я просто хочу визуализировать данные на карте? Django DRF python
Может быть основной вопрос о создании новой конечной точки в DRF. Я новичок в DRF и застрял на создании новой конечной точки, чтобы неаутентифицированные пользователи могли просто получать данные, визуализировать.
Мой проект Django состоит из трех приложений: ядро, пользователь и маркеры.
Приложение "пользователь" выполняет POST, GET, PUT, PATCH и POST. Приложение "маркеры" позволяет пользователю создавать (POST) геолокации и другую информацию, связанную с координатами (имя, координаты, изображения...).
Теперь моя задача состоит в том, чтобы создать новую конечную точку, где анонимный пользователь/неаутентифицированный пользователь мог бы визуализировать данные (на карте), созданные на основе данных пользователей.
Я создал карту, внутри папки markers и не смог добиться успеха в визуализации данных из-за аутентификации. Есть подсказка или пример, как включить визуализацию? Спасибо
GitHub repo https://github.com/silveiratcl/sun_coral_report_app
пользовательская модель models.py:
class UserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
"""Creates and saves a new User"""
if not email:
raise ValueError('User must have an email address')
user = self.model(email=self.normalize_email(email), **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
"""Creates and saves a new super user"""
user = self.create_user(email, password)
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
маркер модели models.py:
class Marker(models.Model):
"""A marker object."""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete = models.CASCADE,
)
name = models.CharField(max_length=255)
location = models.PointField()
image = models.ImageField(null=True, upload_to=marker_image_file_path) #image function
def __str__(self):
"""Return string representation."""
return self.name
marker urls.py
```from django.urls import(
path,
include,
)
from rest_framework.routers import DefaultRouter
from markers import views
from markers.views import MarkersMapView
router = DefaultRouter()
router.register('markers', views.MarkerViewSet)
app_name = 'markers'
urlpatterns = [
path('', include(router.urls)),
path('map/', MarkersMapView.as_view()),
] ```
проект urls.py
SpectacularAPIView,
SpectacularSwaggerView,
)
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('api/schema/', SpectacularAPIView.as_view(), name='api-schema'),
path(
'api/docs/',
SpectacularSwaggerView.as_view(url_name='api-schema'),
name='api-docs',
),
path('api/user/', include('user.urls')),
path('api/markers/', include('markers.urls')),
]
if settings.DEBUG:
urlpatterns += static(
settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT,
) ```
[1]: https://github.com/silveiratcl/sun_coral_report_app
Создайте новое представление и сделайте следующее
if request.user != "AnonymousUser":
#dosomething
else:
Model.objects.all()
если это представление API
используйте self.request.user
он ответит AnonymousUser или с идентификатором пользователя
и передайте его фронтенду
Надеюсь, это поможет
Я не уверен, правильно ли я понимаю ваш вопрос, но вот что я слышу: Вы хотите, чтобы неаутентифицированные пользователи могли создавать объекты Marker
Если это так, сделайте конечную точку публичной, сделайте атрибут user
класса Marker Nullible и любой, у кого есть доступ, сможет создать маркер
сделать конечные точки общедоступными: https://techstream.org/Bits/Public-Endpoint-Django-Rest-Framework