바뀜

2,331 바이트 추가됨 ,  2022년 9월 25일 (일) 09:35
편집 요약 없음
9번째 줄: 9번째 줄:  
def 함수명(request):
 
def 함수명(request):
 
     if request.method=='GET':  # 해당 요청이 없는데 다음 과정을 진행하면 서버에러가 난다.
 
     if request.method=='GET':  # 해당 요청이 없는데 다음 과정을 진행하면 서버에러가 난다.
         담을변수 = request.GET.get('input의 이름속성')  #이름속성에 넣었던 데이터가 변수에 담긴다.
+
         담을변수 = request.GET.get('input의 이름속성')  # 탬플릿의 이름속성에 넣었던 데이터가 변수에 담긴다.
         담을변수2 = request.GET.get('input의 이름속성2')  #이름속성2에 넣었던 데이터가 변수에 담긴다.
+
         담을변수2 = request.GET.get('input의 이름속성2')  # 이름속성2에 넣었던 데이터가 변수에 담긴다.
 
</syntaxhighlight>post라면...
 
</syntaxhighlight>post라면...
    
request.POST['name속성'] 혹은 request.POST.get('name속성') 형태로 전달받은 변수의 값들을 확인할 수 있다.(항상 문자열)
 
request.POST['name속성'] 혹은 request.POST.get('name속성') 형태로 전달받은 변수의 값들을 확인할 수 있다.(항상 문자열)
 +
 +
여러 데이터를 받아와야 할 땐 request.POST.getlist('name속성')으로 같은 name을 가진 값들을 리스트로 받을 수 있다.
    
사전처럼 그 키로 값을 받아온다. '변수'가 없으면 KeyError를 발생시키고, 조건에 맞는 객체가 없으면 <code>객체.DoesNotExist</code> 에러가 발생한다.
 
사전처럼 그 키로 값을 받아온다. '변수'가 없으면 KeyError를 발생시키고, 조건에 맞는 객체가 없으면 <code>객체.DoesNotExist</code> 에러가 발생한다.
21번째 줄: 23번째 줄:     
일반적으로 post입력을 받은 후엔 redirect로 돌려준다.(그렇지 않고 계속 render를 사용하면 post요청이 반복되어 새로고침하면 같은 글이 연속적으로 올라오는 문제가 생긴다.)
 
일반적으로 post입력을 받은 후엔 redirect로 돌려준다.(그렇지 않고 계속 render를 사용하면 post요청이 반복되어 새로고침하면 같은 글이 연속적으로 올라오는 문제가 생긴다.)
 +
 +
폼 체크를 통과한 입력값은 form.cleaned_data로 접근할 수 있다. 사전형태로.
 +
 +
form.cleaned_data['이름'] 형태로.
 +
 
==저장하기==
 
==저장하기==
 
DB에 저장하기 위해선 모델을 불러와 담아야 한다.<syntaxhighlight lang="python">
 
DB에 저장하기 위해선 모델을 불러와 담아야 한다.<syntaxhighlight lang="python">
52번째 줄: 59번째 줄:  
===무언가 누락했을 때 발생시키기===
 
===무언가 누락했을 때 발생시키기===
 
모델, 폼에서의 제약을 걸어주면 누락될 때 자연스레 발생시켜준다.
 
모델, 폼에서의 제약을 걸어주면 누락될 때 자연스레 발생시켜준다.
 +
 +
=== 필드에 에러 추가하기 ===
 +
뷰를 통해 임의로 필드에러를 추가할 경우.<syntaxhighlight lang="python">
 +
form.add_error('필드','추가할 에러')
 +
</syntaxhighlight>
 +
= 모델폼이 아닌, 그냥 폼에서 모델 다루기..(아직 검증 안됨. 프로필 구현하다가 멈춰서...) =
 +
아래 코드로... profile을 만들고, user에 대한 것을 수정, 저장할 수 있을까???? 해봐야 함...
 +
 +
모델폼이 아닌, 그냥 폼으로 여러 처리를 하고 싶을 때.<syntaxhighlight lang="python">
 +
    '''계정 속성을 검증해서 이 사이트에서 회원가입한 계정의 경우에만 접속할 수 있게 하자. 앗, 그러면...sns계정 로그인 시엔 어찌하지;'''
 +
    if request.method == "POST":
 +
        from .models import Profile
 +
        form = Profile_create_form(request.POST)
 +
        if form.is_valid():
 +
            username = form.cleaned_data.get('identifier')      # 유저아이디를 입력받는다.
 +
            raw_password = form.cleaned_data.get('password')    # 패스워드를 입력받는다.
 +
            user = authenticate(username=username, password=raw_password)  # 인증 진행
 +
            if user:  # 유저모델이 반환된다면.. 프로필 모델에 저장한다.
 +
                profile = Profile()
 +
                profile.username = form.cleaned_data.get('username')
 +
                profile.nickname = form.cleaned_data.get('nickname')
 +
                profile.email = form.cleaned_data.get('email')
 +
                profile = profile.save()
 +
                request.user.profile = profile  # 해당 로그인한 유저의 프로필을 이 프로필로 채운다.
 +
                request.user.save()
 +
                return redirect('account:profile')
 +
            else:
 +
                form.add_error('identifier','비밀번호 혹은 아이디가 다릅니다.')
 +
    else:
 +
        form = Profile_create_form()
 +
    context = {'form': form,
 +
              }
 +
    return render(request, 'account/profile_create.html', context)
 +
</syntaxhighlight>