2017-11-28 1 views
0

이 문제로 인해 몇 시간 동안 저를 혼란스럽게했습니다. 사용자가 원하는 경우 사용자가 사진을 업데이트 할 수있는 업데이트 프로필 페이지를 디자인하고 있습니다.이미지 입력 ​​필드가 세션을 벗어났습니다.

문제는 이미지 입력란을 공백으로 남겨두고 다른 입력란을 수정하고 제출을 누르면 변경된 사항이없고 세션이 종료되고 다른 쪽은 업로드 할 이미지를 선택하고 모든 것을 제출할 때 문제가 발생한다는 것입니다. 내가 디자인 한대로 기능이 업데이트되고 업데이트됩니다. 나는 데이터베이스에서 이미지 만 참조를 저장 사촌

class User(models.Model): 
    photo = models.CharField(max_length=100, null=False, blank=True) 

그것은 Charfield이 '입니다 :

여기에 관련 코드입니다.

HTML :

<input type="file" name='photo' class="form-control"> 

보기 :

if request.method == 'POST': 

    photo = request.FILES['photo'] 
    if photo: 
     fs = FileSystemStorage() 
     filename = fs.save(photo.name, photo) 
     uploaded_file_url = fs.url(filename) 
     if uploaded_file_url[-4:] not in ALLOWED_EXTENSIONS: 
       error = 'Invalid File Type' 
       errors.append(error) 

    print(uploaded_file_url) 

당신은 인쇄 문을 무시할 수 있습니다. 나는이 함수의 모든 것을 퍼트 릴 정도로 각 단계에서 함수가 어떻게 작동하는지 볼 수 있습니다. 이 덕분에 파일 입력 필드를 비워두면 다른 코드가 더 이상 처리되지 않고 프로그램이 종료된다는 것을 알 수있었습니다. 그러나 분명히이 분야는 아마도 선택 사항 일 것입니다. 나는 들여 쓰기도 확인했다. 내 머리를 들여.

어떤 생각?

답변

0

나는 uploaded_file_url 변수를 초기화하지 않음으로써 함수 실행을 파기했습니다. 나는 약간 다른 동작을하는 request.FILES['photo']request.FILES.get('photo')으로 변경하려고 시도했지만 동작의 차이는 전혀 명확하지 않습니다. 이 짧은 줄이려고 내가 .get('photo')을 사용했을 때 브라우저에 오류가 발생하여 그 때의 상황을 나에게 암시했다. 변수를 초기화하는 것은 내가해야만하는 모든 것입니다.

내가 주된 차이점은 request.FILES['xxx']이 코드에 대해 벗어난 경우 오류가 발생하지 않으며 단어가 없으면 종료되고 request.get('xxx')은 오류가 발생한다는 것입니다.

관련 문제