Извлечение параметров URL для обновления базы данных приложения Django

-1

Я собираю первую попытку приложения Django, и я хочу извлечь параметры из URL-адреса и использовать их для обновления базы данных в приложении Django. Одна страница приложения содержит сценарий jQuery, который отправляет запрос ajax GET формы http://127.0.0.1:8000/storelatlong/?lng=56.237244700410336&lat=-4.6197509765625 содержащей входную информацию пользователя как ее lat и lng. Я хочу получить эту информацию и использовать ее для обновления UserProfile.latitude и UserProfile.longitude хранящихся в моей базе данных.

Итак, у меня есть два основных вопроса:

  1. Как получить информацию о параметрах в views.storelatlong?

  2. Как только информация там, как я могу ее использовать для обновления models.UserProfile?

urls.py

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from moddle import views
from django.conf.urls.static import static

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^about/$', views.about, name='about'),
    url(r'^contact_us/$', views.contact_us, name='contact_us'),
    url(r'^faq/$', views.faq, name='faq'),
    url(r'^search/$', views.search, name='search'),
    url(r'^register/$', views.register, name='register'),
    url(r'^login/$', views.user_login, name='login'),
    url(r'^logout/$', views.user_logout, name='logout'),
    url(r'^$', views.index, name='index'),
    url(r'^(?P<username>[\w\-]+)/$', views.user_profile, name='user_profile'),
    url(r'^(?P<username>[\w\-]+)/mybookings/$', views.view_bookings, name='view_bookings'),
    url(r'^(?P<username>[\w\-]+)/addbike/$', views.upload_bike, name='upload_bike'),
    url(r'^(?P<bike_id_slug>[\w\-]+)/$', views.bike_profile, name='bike_profile'),
    url(r'^(?P<bike_id_slug>[\w\-]+)/request/$', views.request_bike, name='request_bike'),
    url(r'^storelatlong/$', views.storelatlong, name='storelatlong'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

views.py

def user_profile(request, username):
    context_dict = {}
    try:
        user = User.objects.get(username=username)
        userprofile = UserProfile.objects.get(user=user)
        context_dict['userprofile'] = userprofile
        users_bikes = Bike.objects.filter(owner=userprofile)
        context_dict['bikes'] = users_bikes
    except UserProfile.DoesNotExist:
        print "User does not exist"
        context_dict['bikes'] = None
        context_dict['userprofile'] = None
    return render(request, 'MyApp/user_profile.html', context=context_dict)

def storelatlong(request):
    context_dict = {'': ''}
    lat = float(request.GET.get('lat', ''))
    lng = float(request.GET.get('lng', ''))
    return HttpResponse("OK")

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    phone_number = models.CharField(max_length=16, blank=True)
    gender_male = models.BooleanField()
    post_code = models.CharField(max_length=7)
    longitude = models.FloatField(null=True, blank=True)
    latitude = models.FloatField(null=True, blank=True)
    def __str__(self):
        return self.user.username
    def __unicode__(self):
        return self.user.username

В настоящее время отправка запроса GET приводит только к тому, что я получаю сообщение 301 (перемещается permenantly) и 500 (внутренняя ошибка сервера) в браузере и на сервере командной строки:

[10/Mar/2017 15:43:28] "GET /storelatlong lng=56.359671608143785&lat=-5.23773193
359375 HTTP/1.1" 301 0
Internal Server Error: /storelatlong/
Traceback (most recent call last):
  File "H:\MyAppEnv\lib\site-packages\django\core\handlers\exception.py",     line 39, in inner response = get_response(request)
  File "H:\MyAppEnv\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
      response = self.process_exception_by_middleware(e, request)
  File "H:\MyAppEnv\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "H:\MyApp\MyApp_project\MyApp\views.py", line 33, in user_profile user = User.objects.get(username=username)
  File "H:\MyAppEnv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
   return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "H:\MyAppEnv\lib\site-packages\django\db\models\query.py", line 385, in get self.model._meta.object_name
DoesNotExist: User matching query does not exist.
[10/Mar/2017 15:43:28] "GET /storelatlong/lng=56.359671608143785&lat=-5.23773193359375 HTTP/1.1" 500 18754

Заранее благодарим за ваше время и мудрость.

  • 0
    По каким критериям вы ищете пользователя? Вы получаете ошибку User.DoesNotExist . Где вы запрашиваете пользователя?
  • 0
    Я не думаю, что я запрашиваю пользователя. Где я должен это сделать? И как?
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

Django обрабатывает шаблоны URL по порядку, пока не найдет тот, который соответствует. К сожалению, ваш user_profile имеет шаблон, который соответствует любой буквенно-цифровой строке, которая включает в себя "storelatlong". Таким образом вызывается просмотр user_profile и пытается получить пользователя "storelatlong", которого не существует, и, следовательно, ошибка.

Вы можете исправить это, переместив свой storelatlong шаблон выше user_profile. Однако у вас будет такая же проблема с вашим представлением bike_profile - это имеет тот же шаблон, что и user_profile, поэтому Django просто не различает их. Вы должны использовать префикс или суффикс, чтобы сделать шаблон bike_profile уникальным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню