2012-03-24 3 views
0

내 장고 모델 AddRec (프론트 엔드에서 안드로이드를 갖는)이 코드가 장고 측 에서 외래 키로 사용자를 참조하는 것을 시도하고,안드로이드 장고 사용자 인증-1

이것이 장고 모델,

class AddRec(models.Model): 
    user=models.ForeignKey(User) 
    about=models.CharField(User) 
    created = models.DateTimeField(auto_now_add=True) 

class AddRecForm(ModelForm): 
class Meta: 
    model=AddRec 

@login_required 
def add_record(request): 
    if request.method=='POST': 
     if not request.user.is_authenticated(): # if user is not logged in 
      response_data=[{"success": "0"}] 
      return HttpResponse(simplejson.dumps(response_data),mimetype='application/json') 
    current_user=request.User 
    description=request.POST['about'] 
    new_rec = AddRec(user=current_user,about=description) 
    new_rec.save() 
    response_data=[{"success": "1"}] 
    return HttpResponse(simplejson.dumps(response_data), mimetype='application/json') 
    else: 
     response_data=[{"success": "0"}] 
     return HttpResponse(simplejson.dumps(response_data),mimetype='application/json') 

위의 코드를 Android에서 백엔드로 실행하면 "치명적인 예외"라는 오류 메시지가 나타납니다. 중요한 것은 사용자가 django에서 Android에서 보낸 요청에 액세스 할 수 없다는 것입니다.

안드로이드 측에서 그냥

nameValuePairs.add(new BasicNameValuePair("about", "123")); 

와 내가 데이터를 전송하고 httppost로 데이터를 전송합니다. 사용자가 로그인 한 경우에도 Android 측에서 사용자 이름을 전송해야합니까?

+0

[Android-Django 사용자 인증] 중복 가능 (http://stackoverflow.com/questions/9851972/android-django-user-authentication) – Caleb

답변

0

사용중인 인증은 세션 키를 클라이언트 측의 쿠키 (안드로이드)에 저장합니다. HttpClient을 사용하고 있습니까? 그렇다면 쿠키를 사용해야합니다.

또한 api는 무 상태이어야합니다. 사용자가 쿠키에 쿠키를 사용하여 로그인하지 않아야합니다. http://en.wikipedia.org/wiki/Representational_state_transfer이 문제를 해결하는 몇 가지 유명한 API 인증 방식이 있습니다.

요청과 함께 csrf 토큰을 보내시겠습니까? 그렇지 않은 경우 데코레이터를 사용하여 명시 적으로 csrf 보호를 비활성화 할 수 있습니다. https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt (권장하지 않음)

질문을 게시 할 때 오류 로그, 추적, 기본적으로 뭔가 잘못되었을 때 표시되는 모든 것을 게시하십시오.