Posts
Q&A
AttributeError: 'NoneType' object has no attribute 'send'
์๋ฌด๋๋ ํ๋ก์ ํธ ์ค์ ํ์ผ์ ๋ชป์ฝ๋๊ฑฐ๊ฐ์์os.environ["DJANGO_SETTINGS_MODULE"] = "backend.settings" ์ด ๋ถ๋ถ์ ์์ ํ๋๋ ์ ๋ฉ๋๋ค. !! ๊ฐ์ฌํฉ๋๋ค.os.environ["DJANGO_SETTINGS_MODULE"] = "backend.settings.settings๋ก ๋ฐ๊ฟจ์ด์ฉ "
- 0
- 3
- 1.5K
Q&A
flask ์๋ฒ๊ด๋ จ ๋ฌธ์ ๋๋ฆฝ๋๋ค
์ธ๋ถ ํ๋ก์ ์๋ฒ(nginx) nginx(gunicorn flask) ๊ฐ ์๋๋ผ ํ๋ก์์๋ฒ guniconr flask์ด๋ค์
- 0
- 2
- 392
Q&A
์ง๋ฌธ์์ต๋๋ค
์ ๋ ์ด๊ฑฐ ๋ด์ฌ ๊ถ๊ธํ์๋๋ฐ~ ์ข์ ์ ๋ณด ์ป๊ณ ๊ฐ๋๋ค.
- 1
- 2
- 291
Q&A
์ธ๋ํค ์ค์ ์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒฝ์ฐ
๋๋ถ์ ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ด์ ํ๊ฐ์ ๊ฒ์๋ฌผ์ด ์๊ณ ๊ฒ์๋ฌผ์๋ ์ํ๋๋๋ก ์ฒจ๋ถํ์ผ์ ๋ฃ์์ ์๋๊ฑฐ์ฃ ๊ทธ๋ฆฌ๊ณ ์ํ๋๋๋ก ์ญ์ ํ๊ฑฐ๋ ์ค๊ฐ๋ง ์ ๋ฐ์ดํธ ํ๊ฑฐ๋ ๋ฑ๋ฑ.. ๊ทผ๋ฐ ์ด๊ฒ ์ ๋ฐ์ดํธ ํ ๋๋ createํ ๋๋ ์ข ๋ก์ง์ด ๋ฐ๋์ด์ผ๋๋๊ฑฐ๊ฐ์์ DRF ๊ฐ๋ ฅํ๊ธด ํ๋ฐ, ๋๋ฌด ๊ฐ๋ ฅํด์ ์ด๊ฒ ์ปค์คํฐ๋ง์ด์งํ๋๋ฐ ํฌ์์๊ฐ์ด ๋๋ฌด ๋ง์ด ๋๋ค์ ใ from rest_framework import serializersfrom rest_framework.serializers import raise_errors_on_nested_writesfrom rest_framework.utils import model_metafrom .models import NoticeBoard, NoticeBoardFile, NoticeBoardCommentclass NoticeBoardFileSerializers(serializers.ModelSerializer): file = serializers.FileField(use_url=True) class Meta: model = NoticeBoardFile fields = '__all__' def to_internal_value(self, data): data['name'] = data['file'].name return super().to_internal_value(data) def to_representation(self, instance): representation = super().to_representation(instance) representation.update( { "size": instance.file.size, } ) return representationclass NoticeBoardListSerializers(serializers.ModelSerializer): author = serializers.CharField(source='author.fullname') class Meta: model = NoticeBoard fields = ['id', 'title', 'is_public', 'updated_at', 'author', 'views']class NoticeBoardRetrieveSerializers(serializers.ModelSerializer): author = serializers.CharField(source='author.fullname') noticeboardfile_set = NoticeBoardFileSerializers(many=True) class Meta: model = NoticeBoard fields = '__all__' def validate(self, attrs): attrs = super().validate(attrs) request = self.context['request'] uploaded_files = [] if request.data.getlist('file'): for uploaded_file in request.data.getlist('file'): print(type(uploaded_file)) # print(uploaded_file.name) # serializer = NoticeBoardFileSerializers(data={'file': uploaded_file}) # serializer.is_valid(raise_exception=True) uploaded_files.append(uploaded_file) attrs['file'] = uploaded_files print(attrs) return attrs else: return attrs def update(self, instance, validated_data): raise_errors_on_nested_writes('update', self, validated_data) info = model_meta.get_field_info(instance) uploaded_files = [] file_object_list = [] str_list = [] already_uploaded_file_list = [] already_uploaded_file_list_temp = NoticeBoardFile.objects.filter(post=instance).values_list('id', flat=True) for temp in already_uploaded_file_list_temp: already_uploaded_file_list.append(temp) print('start', already_uploaded_file_list) if 'file' in validated_data: uploaded_files = validated_data.pop('file') if len(uploaded_files) > 0: for uploaded_file in uploaded_files: print(uploaded_file, type(uploaded_file)) if type(uploaded_file) == str: str_list.append(uploaded_file) continue else: file_object_list.append( NoticeBoardFile(post=instance, file=uploaded_file, name=uploaded_file.name)) NoticeBoardFile.objects.bulk_create(file_object_list) else: NoticeBoardFile.objects.filter(post=instance).delete() print(str_list, 'str_list') print('already_uploaded_file_list', already_uploaded_file_list) for already_uploaded_file in already_uploaded_file_list: print(already_uploaded_file) if str(already_uploaded_file) in str_list: continue if not str(already_uploaded_file) in str_list: print(already_uploaded_file, '๋ ์๋ค.') NoticeBoardFile.objects.get(id=already_uploaded_file).delete() # Simply set each attribute on the instance, and then save it. # Note that unlike `.create()` we don't need to treat many-to-many # relationships as being a special case. During updates we already # have an instance pk for the relationships to be associated with. m2m_fields = [] for attr, value in validated_data.items(): if attr in info.relations and info.relations[attr].to_many: m2m_fields.append((attr, value)) else: setattr(instance, attr, value) instance.save() # Note that many-to-many fields are set after updating instance. # Setting m2m fields triggers signals which could potentially change # updated instance and we do not want it to collide with .update() for attr, value in m2m_fields: field = getattr(instance, attr) field.set(value) return instanceclass NoticeBoardCreateSerializers(serializers.ModelSerializer): class Meta: model = NoticeBoard fields = ['title', 'content', 'author'] def validate(self, attrs): attrs = super().validate(attrs) request = self.context['request'] uploaded_files = [] if request.data.getlist('file'): for uploaded_file in request.data.getlist('file'): print(type(uploaded_file)) print(uploaded_file.name) # serializer = NoticeBoardFileSerializers(data={'file': uploaded_file}) # serializer.is_valid(raise_exception=True) uploaded_files.append(uploaded_file) attrs['file'] = uploaded_files return attrs else: return attrs def create(self, validated_data): uploaded_files = [] file_object_list = [] if 'file' in validated_data: uploaded_files = validated_data.pop('file') post = super().create(validated_data) if len(uploaded_files) > 0: for uploaded_file in uploaded_files: file_object_list.append(NoticeBoardFile(post=post, file=uploaded_file, name=uploaded_file.name)) NoticeBoardFile.objects.bulk_create(file_object_list) return post def to_representation(self, instance): representation = super().to_representation(instance) representation.update( { "id": instance.id, } ) return representation
- 0
- 7
- 594
Q&A
์ธ๋ํค ์ค์ ์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒฝ์ฐ
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ์ํ๋๋๋ก ๊ตฌํํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. model.py class NoticeBoard(models.Model): title = models.CharField(verbose_name='์ ๋ชฉ', max_length=512) content = models.TextField(verbose_name='๋ด์ฉ') views = models.PositiveIntegerField(default=0, verbose_name='์กฐํ์') author = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.PROTECT) is_public = models.BooleanField(verbose_name='๊ณต๊ฐ ์ฌ๋ถ', default=True) created_at = models.DateTimeField(verbose_name='์์ฑ์ผ์', auto_now_add=True) updated_at = models.DateTimeField(verbose_name='๋ณ๊ฒฝ์ผ์', auto_now=True) def __str__(self): return f'{self.title}'class NoticeBoardFile(models.Model): post = models.ForeignKey(NoticeBoard, on_delete=models.CASCADE) filename = models.CharField(verbose_name='ํ์ผ๋ช ', max_length=128, blank=True) file = models.FileField(upload_to='files/%Y/%m/%d', blank=True) def delete(self, *args, **kwargs): if self.file: os.remove(os.path.join(settings.MEDIA_ROOT, self.file.path)) super(NoticeBoardFile, self).delete(*args, **kwargs) serializers.py class NoticeBoardFileSerializers(serializers.ModelSerializer): file = serializers.FileField(use_url=True) class Meta: model = NoticeBoardFile fields = '__all__' def to_internal_value(self, data): data['filename'] = data['file'].name return super().to_internal_value(data) def to_representation(self, instance): representation = super().to_representation(instance) representation.update( { "size": instance.file.size, } ) return representation class NoticeBoardCreateSerializers(serializers.ModelSerializer): class Meta: model = NoticeBoard fields = ['title', 'content', 'author'] def validate(self, attrs): attrs = super().validate(attrs) request = self.context['request'] uploaded_files = [] if request.data.getlist('file'): for uploaded_file in request.data.getlist('file'): print(type(uploaded_file)) print(uploaded_file.name) # serializer = NoticeBoardFileSerializers(data={'file': uploaded_file}) # serializer.is_valid(raise_exception=True) uploaded_files.append(uploaded_file) attrs['file'] = uploaded_files return attrs else: return attrs def create(self, validated_data): uploaded_files = [] file_object_list = [] if 'file' in validated_data: uploaded_files = validated_data.pop('file') post = super().create(validated_data) if len(uploaded_files) > 0: for uploaded_file in uploaded_files: file_object_list.append(NoticeBoardFile(post=post, file=uploaded_file)) NoticeBoardFile.objects.bulk_create(file_object_list) return post ๋ง์ง๋ง ์๋ฆฌ์ผ๋ผ์ด์ฆ์์ # serializer = NoticeBoardFileSerializers(data={'file': uploaded_file}) # serializer.is_valid(raise_exception=True) ์ด ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌ ํด์ ํ๋ฉด ์๋ฌ๊ฐ ๋จ๋๋ฐ ๋์ ํ ํด๊ฒฐ์ฑ ์ ๋ชจ๋ฅด๊ฒ ์ด์ ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ์ด๋ด ๋ ๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์ฅ๊ณ ์๋ฆฌ์ผ๋ผ์ด์ฆ ๋๋ฌด ์ด๋ ค์์ ใ ใ ใ ใ ใ ใ ใ ใ ์์ธ๋ฌ ํ๋ก ํธ์๋์์ ๋ณด๋ผ ๋๋ fileList๋ฅผ ๋ณด๋ด๋ฉด str๊ฐ์ผ๋ก ๋ณด๋ด์ ธ์ ๊ทธ๋ฅ formData.append('title', title_value)formData.append('content', value)formData.append('author', '0000')if(files.length > 0){ files.forEach(file => { formData.append('file', file) })} ์ด๋ฐ ์์ผ๋ก ๋ณด๋ด์ผ๋๋๊ฑฐ ๊ฐ์์
- 0
- 7
- 594
Q&A
์ธ๋ํค ์ค์ ์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒฝ์ฐ
def validate(self, attrs): attrs = super().validate(attrs) ์ง๋ฌธ 1 ์ด validate๋ ์์๋ฐ์์ ๊ตฌํํ๋๊ฑด ์๊ฒ ๋๋ฐ attrs = super().validate(attrs) ์ด๋ถ๋ถ์ ์ ํ๋๊ฑธ๊น์? ใ ์ง์ง ํ์ด์ฌ์ ๋ํด์ ํ๋๋ ๋ชจ๋ฅธ๋ค๋๊ฑธ ์ค๊ฐํ๋ค์ ใ ์ง๋ฌธ 2 self.context['request'] ์ด ๋ถ๋ถ์ธ๋ฐ ์๋ฏธ๋ฅผ ๋ ์๊ณ ์ถ์ต๋๋ค. self.context ์ด๋ถ๋ถ์ด์ ์ง๋ฌธ 3 ๊ทธ๋ผ ๋ก์ง์ด ์ผ๋จ ์๋ฆฌ์ผ๋ผ์ด์ฆ๊ฐ ๋ทฐ์์ ํธ์ถ๋๋ฉด validate ํจ์๊ฐ ๋ฐ๋์ด ๋๋ฉด์ ์ด๊ฑธ ํธ์ถํด์ ๊ฒ์ฆ์ ํด์ฃผ๋ฉด ๋๊ณ ์ด attrs ๊ฒฐ๊ณผ๊ฐ validated_data๋ก ๋ค์ด๊ฐ๋๊ฑฐ์ฃ ? ์ง๋ฌธ4 drf์ serializers.ImageField๊ฐ ์๋๋ฐ ๋ชจ๋ธ์์ ์ด๋ฏธ์งํ๋๊ฐ ์๋ค๋ฉด ๋ฐ๋ก ์ ์ฉ์ํด๋ ๋๋๋ถ๋ถ์ธ๊ฐ์.??
- 0
- 7
- 594
Q&A
์ธ๋ํค ์ค์ ์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒฝ์ฐ
models.py class NoticeBoard(models.Model): title = models.CharField(verbose_name='์ ๋ชฉ', max_length=512) content = models.TextField(verbose_name='๋ด์ฉ') author = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.PROTECT) is_public = models.BooleanField(verbose_name='๊ณต๊ฐ ์ฌ๋ถ', default=True) created_at = models.DateTimeField(verbose_name='์์ฑ์ผ์', auto_now_add=True) updated_at = models.DateTimeField(verbose_name='๋ณ๊ฒฝ์ผ์', auto_now=True) def __str__(self): return f'{self.title}'class NoticeBoardFile(models.Model): post = models.ForeignKey(NoticeBoard, on_delete=models.CASCADE, related_name='noticeboardfile') file = models.FileField(upload_to='files/%Y/%m/%d') serializers.py class NoticeBoardFileSerializers(serializers.HyperlinkedModelSerializer): file = serializers.FileField(use_url=True) class Meta: model = NoticeBoardFile fields = ['post', 'file']class NoticeBoardSerializers(serializers.ModelSerializer): noticeboardfile = NoticeBoardFileSerializers(many=True) class Meta: model = NoticeBoard fields = ['title', 'content', 'author', 'is_public', 'created_at', 'updated_at', 'noticeboardfile'] def create(self, validated_data): files_data = validated_data.pop('file') noticeboard = NoticeBoardFile.objects.create(**validated_data) for file_data in files_data: NoticeBoardFile.objects.create(post_id=noticeboard, **file_data) return noticeboard ํ์ฌ ์ด๋ ๊ฒ ์ง๋ ฌํ๋ฅผ ํด์ ์ฑ๊ณต์ ํ๋๋ฐ(๋ชจ๋ธ์ ๋ณธ๋ฌธ์ 2์ ๋์ผํฉ๋๋ค.) ์๊ฐํด๋ณด๋ ๊ฒ์ํ์ ๊ฒ์๊ธ์ ์ด๋ ๊ฒ ์ฌ๋ฆด ๋ ๊ฒ์๊ธ์ด ๋ง๋ค์ด์ง๊ณ ๋์, ๊ฒ์๊ธ์ ์ฒจ๋ถํ์ผ๋ค์ ๋ฃ์ด์ค์ผ ๋๋๋ฐ drf๋ก ๊ตฌํํ ๋ ค๋ ์ด๋ ต๋ค์. ํ๋ก ํธ์๋์์ ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ 1๊ฐ์ ๊ฒ์๊ธ1์ ๋ํด ์ฒจ๋ถํ์ผ 5๊ฐ๋ฅผ ๋ฃ์ด์ ์์ฑ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฐฑ์๋์ ์์ฒญ๋ณด๋ผ ๋๋ NoticeBoard๋ชจ๋ธ์ ๋ํด ์์ฒญ์ ๋ณด๋ด์ ๋ฐฑ์๋์์ NoticeBoard๋ชจ๋ธ์ ๋ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์๋ต๊ฐ์ผ๋ก NoticeBoard์ ์ฃผ์๋ฅผ ๋ณด๋ด์ฃผ๋ฉด ๋ค์ ํ๋ก ํธ์๋์์ NoticeBoard์ฃผ์ + ํ์ผ ๋ฐ์ดํฐ(ํ์ผ 5๊ฐ)์ ๋ํด์ ์์ฒญ์ ๋ค์ ๋ณด๋ด์ค์ผ๋๋๊ฐ์? ๋์์ ๋ณด๋ด๋ฉด ํ์ผ๋ฐ์ดํฐ๋ ์ฐธ์กฐํ ์ ์๋ ๋ชจ๋ธ์ด ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ๊ฐ ์๋ ๊ฑฐ๊ฐ์๋ฐ์ ์ ๊ฐ ์๊ฐํ๋ ๋ฐฉ์์ด ๋ง๋์ง ์๋๋ฉด ๋์์ ๋ณด๋ผ ์ ์๋์ง ๊ถ๊ธํ๋ค์ ๋ณดํต ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง๋ ๊ถ๊ธํ๊ตฌ์ ใ
- 0
- 7
- 594
Q&A
์ธ๋ํค ์ค์ ์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒฝ์ฐ
๊ฐ์ฌํฉ๋๋ค. (__)
- 0
- 7
- 594
Q&A
localStorage.setItem('counter', nextCounter)
๊ฐ์ด ๋ฌด์กฐ๊ฑด ์คํธ๋ง์ผ๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ setitem์๋ ํ๋ณํํด์ค๋ ์๋ฏธ๊ฐ ์๋ ๊ฒ์ด์๊ตฐ์..
- 1
- 1
- 177
Q&A
๊ถ๊ธ์
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. while True: check_ss = util.get_time_ss(time.time()) #์ด๋จ์ ์ฒดํฌ ######(3) ๋ถ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ๋ถ๋ฐ์ดํฐ๋ 1์ดํ ์์ฑ start ###### if check_ss in ('01','02'): #๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ df = util.get_web_1m_data(base_candle_url) time.sleep(process_sleep_time) #๊ธฐ์ ์ ์งํ ์์ฑ df['wma120'] = calc.get_wma(df['c'], 120) df['wma240'] = calc.get_wma(df['c'], 240) df['bh'], df['bhi'], df['bl'], df['bli'], df['bm'], df['bw'] = calc.get_bb(df['c'], 20, 2) df_one = df.iloc[df.shape[0]-1:,] #๋ง์ง๋ง ํ ๊ฑด ๊ฐ์ ธ์ค๊ธฐ wma120 = df_one['wma120'].values[0] wma240 = df_one['wma240'].values[0] bl = df_one['bl'].values[0] print('ddddd') ์ด ๋ถ๋ถ๋ง ๋ณด๋ฉด, 01์ด 02์ด์ print๋ฌธ์ด ํ๋ฒ๋ง ํธ์ถ๋๋๊ฒ ์๋๋ผ ๊ณ์ ํธ์ถ๋ฉ๋๋ค.(01์ด 02์ด ๋ด์ ์ฌ๋ฌ๋ฒ) ๊ทธ๋ฌ๋ฉด ๊ธฐ์ ์ ์งํ๋ ํ๋ฒ์์ฑ๋๋ฉด ๋๋๋ฐ ์ปดํจํฐ ์๋์ ๋ฐ๋ผ ๋ถ๋ช ์ค๋ณต์ผ๋ก ๊ณ์ ์์ฑ๋๋๊ฑฐ๊ฐ์์ ๋ญ๊ฐ ํ๋ฒ๋ง ํธ์ถ๋๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์์.
- 0
- 3
- 290




