Пример #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, )))
Пример #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, )))
Пример #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 : 클라이언트가 서버로 보낸 파일정보를 관리하는 변수
        
        #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,)))
Пример #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 : 클라이언트가 서버로 보낸 파일정보를 관리하는 변수
        # 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, )))
Пример #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, )))
Пример #6
0
def upload_post_image(request, **kwargs):
    post_id = kwargs['id']
    post = Post.objects.get(id=post_id)
    name = request.POST.get('name')
    if not name:
        return HttpResponseBadRequest('Query parameter "name" is required.')
    image = request.FILES.get('image')
    if not image:
        return HttpResponseBadRequest('File "image" is required.')
    image = PostImage(name=name, image=image, post=post)
    image.save()
    return HttpResponse()
Пример #7
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, )))
 def post(self, request):
     form = CreatePostForm(request.POST)
     form.instance.author = self.request.user
     images_form = ImageFormSet(request.POST,
                                request.FILES,
                                queryset=PostImage.objects.none())
     if form.is_valid() and images_form.is_valid():
         posts = form.save()
         for i_form in images_form.cleaned_data:
             image = i_form.get('image')
             if image is not None:
                 pic = PostImage(post=posts, image=image)
                 pic.save()
         return redirect(posts.get_absolute_url())
     print(form.errors, images_form.errors)
Пример #9
0
 def form_valid(self, form):
     obj = form.save(commit=False)
     obj.author = self.request.user
     obj.save()
     #사용자가 지정요청한 이미지파일, 파일 객체 생성
     for f in self.request.FILES.getlist('images'):
         image = PostImage(post=obj, image=f)
         #image = PostImage()
         #image.post = obj
         #image.image = f
         image.save()
     #사용자가 준 파일 정보에서 'files' 라벨로 온 데이터를 추출
     for f in self.request.FILES.getlist('files'):
         file = PostFile(post=obj, file=f)
     #완성한 글의 url로 이동s
     return HttpResponseRedirect(reverse('blog:detail', args=(obj.id, )))
Пример #10
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, )))
Пример #11
0
 def form_valid(self, form):
     obj = form.save(commit=False) #Post 객체로 변환
     #self.request == 뷰 함수의 request 매개변수
     obj.author = self.request.user#유저정보 채우기
     obj.save()                      #객체를 데이터베이스에 저장
     #사용자가 저장요청한 이미지파일, 파일 객체 생성
     #name이 'images'인 파일데이터를 추출하는 방법
     for f in self.request.FILES.getlist('images'):
         #PostImage 모델클래스의 객체 생성
         #객체 생성 시 각 변수에 값을 대입
         image = PostImage(post = obj, image = f)
         #image = PostImage()
         #image.post = obj
         #image.image = f
         image.save()
     #사용자가 준 파일 정보에서 'files'라벨로 온 데이터 추출
     for f in self.request.FILES.getlist('files'):
         #PostFile 모델클래스의 객체 생성
         file = PostFile(post = obj, file = f)
         file.save()
     #완성한 글의 URL로 이동
     return HttpResponseRedirect(reverse('blog:detail', args=(obj.id,)) )
Пример #12
0
    def handle(self, *args, **options):
        posts = Post.objects.all()
        posts_without_images = [
            post for post in posts
            if not post.get_images() and not post.sponsored
        ]
        broken_dict = {}

        for p in posts_without_images:
            print "++++++++++++++++"
            print "++++++++++++++++"
            print "++++++++++++++++"
            print "working on %s" % p.id
            all_urls = p.get_all_images_from_body()
            working_urls = p.get_working_images_from_body()
            broken_urls = p.get_broken_images_from_body()
            print all_urls
            print "working: %s, broken %s" % (working_urls, broken_urls)

            soup = Soup(p.body)

            #get the working url images and save them to server
            for url in working_urls:
                img = urllib2.urlopen(url).read()

                try:
                    image_name = urlparse(url).path.split('/')[-1].replace(
                        '%', '-')
                    image_ext = image_name.split('.')[-1]
                    image_name = image_name.split('.')[0]
                    image_name = slugify(image_name)
                    image_name = image_name[:25]
                    image_name = image_name + '.' + image_ext

                    im = Image.open(StringIO.StringIO(img))
                    im.verify()

                    post_image = PostImage()
                    post_image.post = p
                    post_image._width = im.size[0]
                    post_image._height = im.size[1]
                    post_image.title = image_name

                    rhiz_media_url = 'http://media.rhizome.org/blog/%s' % p.id

                    if rhiz_media_url not in url:
                        # 'downloading and saving image to disk'
                        post_image.image.save(image_name,
                                              ContentFile(img),
                                              save=False)
                    else:
                        # 'image already on disk, saving path'
                        post_image.image = url.replace(
                            'http://media.rhizome.org/', '')
                    post_image.save()

                    soup_image = soup.findAll('img', {"src": str(url)})[0]

                    # for local testing
                    soup_image[
                        'src'] = "http://localhost:8000/media/%s" % post_image.image

                    #production
                    #soup_image['src'] = "http://media.rhizome.org/%s" % post_image.image

                except Exception, e:
                    broken_urls.append(url)

            if broken_urls:
                broken_dict[p.id] = broken_urls

            p.body = soup.prettify()
            p.save()
Пример #13
0
    def handle(self, *args, **options):
        posts = Post.objects.all()
        posts_without_images = [post for post in posts if not post.get_images() and not post.sponsored]
        broken_dict = {}

        for p in posts_without_images:
            print "++++++++++++++++"
            print "++++++++++++++++"
            print "++++++++++++++++"
            print "working on %s" % p.id
            all_urls = p.get_all_images_from_body()
            working_urls = p.get_working_images_from_body()
            broken_urls = p.get_broken_images_from_body()
            print all_urls
            print "working: %s, broken %s" % (working_urls, broken_urls)

            soup = Soup(p.body)

            #get the working url images and save them to server
            for url in working_urls:
                img = urllib2.urlopen(url).read()  
                
                try:
                    image_name = urlparse(url).path.split('/')[-1].replace('%','-')
                    image_ext = image_name.split('.')[-1]
                    image_name = image_name.split('.')[0]
                    image_name = slugify(image_name)
                    image_name = image_name[:25]
                    image_name = image_name +'.'+ image_ext

                    im = Image.open(StringIO.StringIO(img))
                    im.verify()
                    
                    post_image = PostImage()
                    post_image.post = p
                    post_image._width = im.size[0]
                    post_image._height = im.size[1]
                    post_image.title = image_name
                    
                    rhiz_media_url = 'http://media.rhizome.org/blog/%s' % p.id  

                    if rhiz_media_url not in url:
                        # 'downloading and saving image to disk'
                        post_image.image.save(image_name, ContentFile(img), save=False)
                    else:
                        # 'image already on disk, saving path'                    
                        post_image.image = url.replace('http://media.rhizome.org/','')
                    post_image.save()
                     
                    soup_image = soup.findAll('img', {"src": str(url)})[0]
                    
                    # for local testing 
                    soup_image['src'] = "http://localhost:8000/media/%s" % post_image.image
                    
                    #production 
                    #soup_image['src'] = "http://media.rhizome.org/%s" % post_image.image
                
                except Exception, e:
                    broken_urls.append(url)
            
            if broken_urls:
                broken_dict[p.id] = broken_urls

            p.body = soup.prettify()
            p.save()