2014-06-30 2 views
0

이것은 초심자 질문입니다. 나는 사용자 이름과 암호를 가진 사용자를 저장하기위한 테이블을 가진 mysql 데이터베이스를 가지고있다. 난 django가 'SyncDb'를 처음 실행할 때 설치하는 인증 백엔드와 테이블을 사용하고 싶지 않습니다. 그래서 내 질문은 : 내가 어떻게 정의 된 데이터베이스에서 활성 사용자를 찾는 대신 django 내가 만든 데이터베이스를 사용하도록 지시합니까. 이 코드를 사용하고 있지만 물론 'auth_user'테이블에 언급 된 사용자를 찾고 있습니다.사용자 정의 인증 방법 또는 동일하게하는 다른 방법? 장고

class LoginView(FormView): 
    form_class = LoginForm 
    redirect_field_name = REDIRECT_FIELD_NAME 
    template_name = 'login.html' 
    success_url = 'index' 

    def form_valid(self, form): 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 

     user = authenticate(username=username, 
          password=password) 
     if user is not None: 
      if user.is_active: 
       login(self.request, user) 
       return HttpResponseRedirect(self.get_success_url()) 
     else:   
      return self.form_invalid(form) 

    def form_invalid(self): 
     return HttpResponseRedirect(reverse('app_name:login')) 

    def get_success_url(self): 
     if self.success_url: 
      redirect_to = self.success_url 
     else: 
      redirect_to = self.request.REQUEST.get(self.redirect_field_name, '') 

     netloc = urlparse.urlparse(redirect_to)[1] 
     if not redirect_to: 
      redirect_to = settings.LOGIN_REDIRECT_URL 
     elif netloc and netloc != self.request.get_host(): 
      redirect_to = settings.LOGIN_REDIRECT_URL 
     return redirect_to 

    def post(self, request, *args, **kwargs): 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     if form.is_valid(): 
      return self.form_valid(form) 
     else:     
      return self.form_invalid() 

그래서 내 초심자 질문입니다. 고마워요

추신 : 내 form_invalid()가 작동하지 않습니다 ... (오류 : 1 대신 2 개의 매개 변수 전달) 제안 사항을 알려주십시오.

1) 확인 : 다시 말하지만, 당신에게 우리는 우리의 프로젝트를 위해이 문제를 알아 내려고했고, 초기 혼란은 기본적으로이 일어날 수 있도록 장고에 두 가지 문제를 처리 할 필요가 있다는 사실에서 비롯

+0

왜 django의 인증 모델을 사용하지 않으시겠습니까? 당신이 요구하는 것은 특히 당신이 새라고 말한 것처럼 사소한 것이 아닙니다. 장고가 제공하지 않는 사용자 정의 필드를 저장하고 있기 때문입니까? 또는 사용자 이름이 아닌 로그인으로 이메일 주소를 사용 하시겠습니까? 이 모든 것은 인증 프레임 워크 내에서 쉽게 처리 될 수 있습니다. –

+0

어떤 점에서는 사용자 이름이 아닌 이메일 주소를 사용하고 싶습니다. 나는 이것에 관해 새로운 것을 언급했다. 그래서 나는 당신이 당신이 제안하고있는 것에 맞을 것이라고 확신한다. 나는 기본적인 것들로 별표를 만들고 싶다. 그래서 로그인을 수정하여 무엇이 가장 좋은 것인지 알아볼 수있다. 내가 회사 서버와 그 이상으로 애플리케이션을 옮길 때, 나는 장고 데이터베이스가 아닌 적절한 데이터베이스에 데이터를 저장하고 싶다. 어쩌면이 문제를 잘못하면 알려주세요. 고마워요 – user3799942

+0

기본으로 시작하려면 장고가 제공하는 모든 것을 붙잡아서 프레임 워크를 배울 수 있습니다. 한번 핸들을 잡으면 커스터마이징을 이해할 수 있습니다. 또한, 당신이 의미하는 것을 설명해야합니다 _ "적절한 데이터베이스에 데이터를 저장하고 장고에 저장하지 마십시오"_. –

답변

2

대단히 감사합니다 이 응용 프로그램은 올바른 데이터베이스 (1a)에 전달되어 다른 데이터베이스가 실제로

2 장고

에 의해 작성 될 수 있음)

는 다행히 이것이 기본 사용자 모델을 덮어 사용하기 "응용 프로그램"모듈 만들기) 확인 일단 문제가 명확하게 정의되면 꽤 간단합니다.

https://docs.djangoproject.com/en/dev/topics/db/multi-db/

첫 번째 섹션은 "데이터베이스를 정의"어떻게 프로젝트에 추가 데이터베이스를 추가하는 방법을 보여줍니다. Django가 액세스하는 데 사용할 자격 증명이 있는지 확인하십시오. 따라서 액세스 구조에 따라 추가 단계가 포함될 수도 있고 포함되지 않을 수도 있습니다.

"자동 데이터베이스 라우팅"섹션에서는 db 라우터의 일반적인 개념을 설명합니다. 그러나이 훌륭한 토론을 확인하고 데이터베이스 라우팅을 쉽게하기 위해 코드를 활용하는 것이 좋습니다 : http://justcramer.com/2010/12/30/database-routers-in-django/. 이 방법을 사용하면 프로젝트에서이 라우터를 사용하고 settings.py (DATABASE_CONFIG)에 lib를 정의하여 DATABASE_ROUTERS를 링크의 코드로 설정 한 후 라우팅 할 위치를 각 응용 프로그램에 알릴 수 있습니다. 기본 라우터를 모든 장고를 가진 라우터로 만든 다음 필요할 때마다 레거시 db를 정의하십시오.

마지막으로, 사용자 모델의 경우 "장고의 인증 사용자 정의"에 대한 문서를 확인하십시오 (링크가 게시 할 수 없습니다. 첫 번째 대답이고 충분한 평판이 없기 때문에 링크를 게시 할 수 없습니다). 사용자 정의 모델 (및 구현 양식을 기반으로 권한에 대한 잠재적 인 관리 양식 및 사용자 정의 인증)을 작성하고 AUTH_USER_MODEL을 사용하여 프로젝트 settings.py에 포함시켜야합니다. 이 페이지의 핵심 섹션은 "사용자 정의 사용자 모델 대체"입니다. 그러나 암호를 사용자와 일치시키는 것만 큼 간단하면 통증이 거의 없어야하지만 암호가 어떻게 해시되는지주의해야합니다. settings.py의 PASSWORD_HASHERS는 장고를 저장할 때 패스워드와 기본 설정 순서를 사용할 수 있도록 장고에게 알려줍니다. 특정 해싱 스키마를 유지하려면 목록의 맨 위로 이동해야합니다. 그렇지 않으면 Django는 PW 액세스를 수행해야 할 때 첫 번째로 나열된 선호 된 스키마로 이동합니다. 실제로 암호는 강력한 스키마로 자동 마이그레이션되지만 좋은 기능이지만 다른 시스템과 통합해야하는 경우주의해야합니다.

일반 포인터 (그리고 이것은 RTM으로 의도 된 것이 아닙니다) 장고 문서는 매우 좋으며 일반적으로 질문에 대답 할 것입니다 (소스가 꽤 읽기 쉽고 몇 가지를 풀어야했습니다. 그런 식으로).그러나, 당신이 고치려고하는 이슈와 장고가 부르는 것을 깨닫기 전까지는, 조각들을 함께 맞추는 것은 다소 혼란 스러울 수 있습니다. Django를 사용하여 기본 문서를 잘 읽으려면 무엇이든 할 계획이라면, 아마도 두 번, 조각을 적합하게 만드는 데 시간이 걸릴 것입니다. 바라기를 바꿔서이 질문에 대한 답을 얻고 어디를 가야하는지 알 수 있습니다.이 시나리오가 좀 더 광범위해질 수 있음을 알 수 있습니다.보다 구체적인 질문을 통해 문제가 제기 될 경우 알려 주시면됩니다. 그렇지 않은 경우 구현과 리콜 중 핵심 사항입니다. 내가 작성한 코드 리뷰.

+0

안녕하세요. 이 정보는 당신이 제안하는 것을하려고 노력할 것이고 당신에게 알려줄 것입니다. 빠른 응답에 감사드립니다. – user3799942

+0

차가움. 또한 이전 데이터베이스를 손상시키지 않는 이유가 있다고 가정하고 (그리고 모든 단계가) 가정해야한다고 생각했습니다. 이전 데이터베이스의 사용자 이름과 암호 만 원한다면 실제로 장고가 새 DB를 만들 수있게하고 Django 인증 테이블의 각 위치로 값을 이동시키는 SQL 스크립트를 작성하는 것이 더 쉽습니다. 제 경우에는 레거시 DB가 중요했습니다. – Jmills

+0

사실,이 일을 테스트하기 때문에 나는 단지 장고가 새로운 데이터베이스의 테이블에서 사용자를 검색하기를 원한다. 나는 단지 10 명의 사용자 만 테스트 할 수 있으며, 데이터베이스에 모두 있기 때문에 장고가 왜 그 점을 가리 키기를 원하는지 그 이유를 만들었습니다. 도움이되는지 확인하기 위해 당신의 대답을 기다리겠습니다. 미리 감사드립니다. – user3799942

관련 문제