2017-03-10 8 views
-2

私はDjangoアプリケーションで初めての試みを行い、URLからパラメータを抽出し、Djangoアプリケーションでデータベースを更新するために使用します。アプリケーションの1ページには、latlngのパラメータとして、ユーザー入力情報を含むフォームhttp://127.0.0.1:8000/storelatlong/?lng=56.237244700410336&lat=-4.6197509765625のajax GETリクエストを送信するjQueryスクリプトが含まれています。私はその情報を取得し、私のUserProfile.latitudeUserProfile.longitudeの値を私のデータベースに保存するためにそれを使用したいと思います。Djangoアプリケーションデータベースを更新するためのURLパラメータの抽出

だから、私は2つの基本的な質問持っている:私はviews.storelatlongにパラメータ情報を取得するにはどうすればよい

  1. を?

  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 
事前に

[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 

ありがとう:10

は現在、GETリクエストを送信することはちょうど私の取得301(permenantly移動)と500(内部サーバーエラー)ブラウザ内のメッセージとコマンドラインサーバに次につながりますあなたの時間と知恵のために。

+0

ユーザーを検索する基準は?あなたは 'User.DoesNotExist'のエラーを受け取ります。ユーザーのクエリはどこですか? –

+0

私はユーザーのために質問しているとは思わない。私はどこでそうするべきですか?そしてどうやって? –

+0

私に教えてください。何らかの理由であなたのURLにいくつかのGETパラメータがあり、 'UserProfile'レコードをこれらの(新しい)パラメータで更新したいのですか? –

答えて

1

Djangoは、一致するものが見つかるまで、URLパターンを順番に処理します。残念ながら、user_profileには、「storelatlong」を含む英数字の文字列に一致するパターンがあります。そのため、user_profileビューが呼び出されており、存在しないユーザー "storelatlong"を取得しようとします。したがって、エラーです。

storelatlongパターンをuser_profileの上に移動することでこれを修正できます。しかし、あなたはbike_profileのビューでまったく同じ問題を抱えています - これはちょうどuser_profileと同じパターンなので、Djangoがそれらを区別するための方法はありません。 bike_profileパターンを一意にするには、接頭辞または接尾辞を使用する必要があります。

関連する問題