Exemple #1
0
    def form_valid(self, form):
        #PostForm 객체를 저장하기 전에 글쓴이 정보를 저장해야함
        #데이터베이스에 바로정장하지 않고 연동된 모델클래스로 변환

        #p: 사용자 입력으로 제목,카테고리,글내용이 채워진 Post객체(아직 데이터베이스에 저장되지 않음)
        p = form.save(commit=False)
        #request.user: 요청한 클라이언트의 로그인 정보(User모델클래스객체)
        #이 요청을 한 클라이언트의 유저정보를 Post객체에 저장
        p.author = self.request.user
        p.save()  #데이터베이스에 저장

        #PostImage객체생성
        #사용자가 넘겨준 이미지,파일마다 객체 생성
        #사용자가 넘겨준 이미지파일마다 PostImage 객체 생성
        #request.FILES: 클라이언트가 서버로 보낸 파일정보를 관리하는 변수(객체)
        #f: 사용자가 보낸 이미지 파일의 실제정보
        #PostImage에서 images로 주소를 저장해서 getlist안에 'images'로 된 주소 사용
        for f in self.request.FILES.getlist('images'):
            pi = PostImage()
            #이 요청으로 새로 만들어진 Post객체와 연결
            pi.post = p
            #사용자가 보낸 이미지파일 정보를 변수에 저장
            pi.image = f
            pi.save()  #데이터베이스에 새로운 PostImage객체 저장

        #사용자가 넘겨준 첨부파일마다 PostFile객체 생성
        for f in self.request.FILES.getlist('files'):
            pf = PostFile()
            pf.post = p
            pf.file = f
            pf.save()

        #완성된 글의 URL을 전달
        return HttpResponseRedirect(reverse('blog:detail', args=(p.id, )))
Exemple #2
0
 def form_valid(self, form):
     #Form객체를 Post객체로 변환
     #why?: Post객체를 데이터베이스에 저장할 때 user변수에 값이 들어있지 않은 상태기 때문에 에러가 발생
     #p: 사용자입력을 바탕으로 category, title, content변수가 채워져있는 새로운 Post객체
     p = form.save(commit=False)
     #User정보를 클라이언트의 유저정보로 대입
     #self.request: 해당 뷰를 요청한 클라이언트의 요청정보가 저장된 변수
     #self.request.user: 요청한 클라이언트의 User모델클래스 객체 저장 변수
     p.user = self.request.user
     #데이터베이스에 Post객체 저장
     p.save()
     #사용자가 업로드한 파일 데이터를 바탕으로 PostFile객체 생성
     #사용자가 업로드한 파일의 갯수만큼 반복
     #self.request.FILES: 사용자가 업로드한 파일을 저장한 변수
     #self.request.FILES.getlist(name속성이름): 해당 입력공간에 업로드된 파일 데이터들을 추출
     for f in self.request.FILES.getlist('files'):
         pf = PostFile()  #새로운 PostFile객체 생성- 데이터베이스에 저장X
         pf.post = p  #새로 만들어진 Post객체와 연동
         pf.file = f  #사용자가 업로드한 파일을 FileField에 저장
         pf.save()
     #사용자가 업로드한 이미지데이터를 바탕으로 PostImage객체 생성
     #사용자가 'images' 입력공간에 업로드한 파일들을 바탕으로 객체생성
     for i in self.request.FILES.getlist('images'):
         #새로운 PostImage객체 생성 - 데이터베이스에 저장 X
         pi = PostImage()
         pi.post = p
         pi.image = i
         pi.save()
     #blog:detail로 리다이렉트
     #새로 만들어진 Post객체의 id 값으로 detail뷰의 주소 전달
     return HttpResponseRedirect(reverse('blog:detail', args=(p.id, )))
Exemple #3
0
    def form_valid(self, form):
        # 매개변수 form : is_valid()함수를 통과한 PostForm 객체
        # PostForm객체를 바탕으로 Post객체 저장
        # 글쓴이(author) 변수가 비어있으므로, 데이터베이스에 저장하지 않음

        p = form.save(commit=False)  # p : Post객체
        # request.user : 요청한 클라이언트의 로그인정보(User 모델클래스 객체)
        p.author = self.request.user  # 로그인을 한 사람과 작성자를 매칭
        p.save()  # Post 객체가 데이터베이스에 저장됨

        # 클라이언트가 보낸 첨부파일, 이미지파일을 바탕으로 PostFile, PostImage객체 생성 및 저장
        # request.FILES : 클라이언트가 서버로 보낸 파일정보를 관리하는 변수
        # return FormView.form_valid(self, form)

        # PostFile 객체를 생성
        for f in self.request.FILES.getlist(
                'files'):  # 파일을 몇개를 보낼지 모르기때문에 for문을 이용해서 하나씩 꺼냄(?)
            # f : 파일 정보
            pf = PostFile(
            )  # 새로운 PostFile 모델클래스의 객체 생성 # models에서 PostFile로 입력양식을 제공을 했기 때문에
            pf.file = f
            pf.post = p
            pf.save()  # 데이터베이스에 새로운 PostFile 객체가 처장됨

        # PostImage 객체를 생성
        for i in self.request.FILES.getlist(
                'images'):  # getlist도 파일이나 이미지가 몇개일지 모르기 때문에 사용
            # i : 이미지 정보
            pi = PostImage()
            pi.post = p
            pi.image = i
            pi.save()

        # 완성된 글페이지로 URL이동
        return HttpResponseRedirect(reverse('blog:detail', args=(p.id, )))
Exemple #4
0
    def form_valid(self, form):
        
        #매개변수 form : is_valid()함수를 통과한 PostForm 객체
        #PostForm객체를 바탕으로 Post객체 저장
        #글쓴이 (author) 변수가 비어있으므로, 데이터베이스에 저장하지 않음

        p = form.save(commit = False) #p : Post 객체
        #request.user : 요청한 클라이언트의 로그인 정보(User 모델 클래스 객체)
        p.author = self.request.user 
        p.save() #Post 객체가 데이터 베이스에 저장됨
        
        #클라이언트가 보낸첨부파일, 이미지 파일을 바탕으로 PostFile, PostImage 객체 생성 및 저장
        
        #request.FILES : 클라이언트가 서버로 보낸 파일정보를 관리하는 변수
        
        #PostFile 객체를 생성
        
        for f in self.request.FILES.getlist('files'):
            #f 파일정보
            pf = PostFile() #새로운 PostFile 모델 클래스의 객체 생성
            pf.file = f
            pf.post = p
            pf.save() #데이터 베이스에 새로운 PostFile 객체가 저장됨
            
        
        #PostImage객체를 생성
        for i in self.request.FILES.getlist('images'):
            #i : 이미지 정보
            pi = PostImage()
            pi.post = p
            pi.image = i
            pi.save()
        
        #완성된 글 페이지로 URL 이동
        return HttpResponseRedirect(reverse('blog:detail', args = (p.id,)))
Exemple #5
0
    def form_valid(self, form):
        #form을 썼을때 save를 하면 바로 저장이 되었고, (매개변수commit=False면 저장이 안된다.)
        #Form객체를 Post객체로 변환
        #Commit=False를 쓴 이유 : Post객체를 데이터베이스에 저장할 때 user변수에
        #값이 들어있지 않은 상태기 때문에 에러가 발생
        #p에는 지금 post객체가 저장되어 있다.
        #p : class에서 사용자 입력을 바탕으로 category, title, content변수가 채워져 있는
        #새로운 Post객체 => p.category / p.title / p.content를 쓸 수 있음
        # category, title, content는 앞으로 채워질거니까 빈칸으로 저장해져도 되는데
        # User라는 변수는 비어있으면 안된다. 그래서 저장을 하기 전에 user의 값을 써야한다.
        # Post class의 변수 5개 중 pub_date는 자동 / 카테고리,타이틀,콘텐츠는 앞으로 채울거니까 비어있도 되는데(blank=True설정), 유저는 비어있으면 안된다.
        p = form.save(commit=False)  #자동완성하면 안됨

        #user정보를 클라이언트의 유저정보로 대입
        #user정보는 request.user라는 변수에 저장됨 (사용자 요청정보가 있는 정보)
        #비로그인 상태는 None값이 저장되어 있다.
        #self.request : 해당 뷰를 요청한 클라이언트의 요청정보가 저장된 변수
        #slef.request.user : 요청한 클라이언트의 User모델클래스 객체저장 변수
        p.user = self.request.user  #최종 저장전 user를 채워준다.

        #데이터베이스에 Post객체 저장
        p.save()  #새로운 객체 생성
        # 저장을 하려면 빈칸을 허용하거나, 빈칸이 없어야 한다.
        # 다른 데이터는 blank=True이기 때문이고, user는 blank가 true가 아니다.
        # SET_NULL이라는 설정 값을 넣으면 user가 빈칸이어도 된다.

        # 사용자가 입력한 것은 request.POST / request.GET 으로 저장된다.
        # 사용자가 업로드한 파일 데이터를 바탕으로 PostFile 객체 생성
        # 사용자가 업로드한 파일의 갯수만큼 반복
        # self.request.FILES : 사용자가 업로드한 파일을 저장한 변수
        # self.request.FILES.getlist(name속성이름)
        # : 해당 입력 공간에 업로드된 파일 데이터들을 추출
        for f in self.request.FILES.getlist('files'):
            #files라는 이름으로 날라온 파일들을 list로 만들어내서 하나씩 추출해서 f라는 이름으로 반복문에서 활용하겠다.
            #files라는 이름은 form class에서 name 속성이다.
            #더블 클릭하여 자동 import/자동완성으로 안했을 경우 끝에 커서 대고 ctrl + space바 누르면 더블클릭하여 import 가능
            pf = PostFile()  #post변수(외래키)와 file변수가 있음
            #두 변수가 다 채워져야 저장이 된다.
            pf.post = p  #새로만들어진 Post객체와 연동
            pf.file = f  #사용자가 업로드한 파일을 FileField에 저장
            pf.save()  #두변수가 다 채워졌으므로 save

        # 사용자가 업로드한 이미지데이터를 바탕으로 PostImage객체 생성
        # 사용자가 'images' 입력공간에 업로드한 파일들을 바탕으로 객체생성을 하는 과정
        # forms.py에서 커스터마이징한 변수이름을 따오면 된다.
        for i in self.request.FILES.getlist('images'):
            #새로운 PostImage 객체 생성 - 데이터베이스에 저장 x
            pi = PostImage()
            pi.post = p
            pi.image = i
            pi.save()

        # blog:detail로 리다이렉트
        # Detail view는 3개 변수
        # 새로운 만들어진 Post객체의 id값으로 detail뷰의 주소 전달
        return HttpResponseRedirect(reverse('blog:detail', args=(p.id, )))
Exemple #6
0
 def form_valid(self, form):
     p = form.save(commit=False)
     p.author = self.request.user
     p.save()
     for f in self.request.FILES.getlist('files'):
         pf = PostFile()
         pf.file = f
         pf.post = p
         pf.save()
     for i in self.request.FILES.getlist('images'):
         pi = PostImage()
         pi.post = p
         pi.image = i
         pi.save()
     return HttpResponseRedirect(reverse('blog:detail', args=(p.id, )))
Exemple #7
0
    def form_valid(self, form):
        #Form 객체를 Post 객체로 변환
        #p : 사용자 입력을 바탕으로 category, title, contents변수가 채워져 있는 새로운 Post객체임
        #model.py에 post에는 category, title, contents, user, pub_date가 있음
        #category, title, contents는 사용자가 입력하고, pub_date는 자동생성됨.
        #빈칸은 원래 저장되지 않으므로(저장 시 에러), contents처럼 blank함수를 써야하나,
        #user에는 지정하지 않았으므로 앞으로 채워야함.
        #commit=False : post객체를 DB에 저장할 때 user변수에 값이 들어있지 않은 상태기 때문에 에러가 발생함.
        #따라서 DB에 저장하지 않고 연동된 모델 클래스의 객체로 변환만 함
        p = form.save(commit=False)

        #user 정보를 클라이언트의 유저정보로 대입
        #self.request : 해당 뷰를 요청한 클라이언트의 요청정보가 저장된 변수
        #self.request.user : 요청한 클라이언트의 User모델크래스 객체 저장 변수
        p.user = self.request.user

        #DB에 Post객체 저장
        #user변수에 값이 들어갔으므로 저장할 수 있게됨
        p.save()

        #(post객체에 딸려온) 사용자가 업로드한 파일 데이터를 바탕으로 PostFile 객체 생성
        #self.request.FILES : 사용자가 업로드한 파일을 저장한 변수
        #self.request.FILES.getlist(form.py의 name속성 이름(images , files )) : 해당 입력공간에 업로듣된 파일 데이터들을 추출
        #사용자가 업로드 한 파일의 갯수만큼 반복
        for f in self.request.FILES.getlist('files'):
            #새로운 PostFile (model.py에 있는) 객체 생성 - DB에 저장 X
            pf = PostFile()
            pf.post = p  #새로 만들어진 Post객체와 연동
            pf.file = f  #사용자가 업로드한 파일을 FileField에 저장

            pf.save()

        #사용자가 업로드한 이미지 데이터를 바탕으로 PostImage 객체 생성
        #사용자가 'images'입력공간에 업로드한 파일들을 바탕으로 객체 생성
        for i in self.request.FILES.getlist('images'):
            #새로운 PostFile (model.py에 있는) 객체 생성 - DB에 저장 X
            pi = PostImage()
            pi.post = p
            pi.image = i

            pi.save()

        #blog:detail 로 리다이렉트
        #새로 만들어진 Post객체의 id값으로 detail뷰의 주소 전달
        return HttpResponseRedirect(reverse('blog:detail', args=(p.id, )))