Python (96) 썸네일형 리스트형 Nginx Django static file 경로 설정하기 실습 운영체제: Linux(Ubuntu) Nginx를 이용해서 Django web app을 배포할시에, static file 들을 경로를 설정해줘야 합니다. STATIC_URL, STATIC_ROOT 를 설정하고 python manage.py collectstatic STATIC_ROOT는 배포용에 쓰이는 static 경로이고 STATIC_DIRS는 개발단계에서 쓰이는 static 경로라 보면 됩니다. 2개를 가각 다르게 설정해줘야 합니다. 예를 들면 다음과 같이 하면 됩니다. STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),] STATIC_ROOT = os.path.join(BASE_DIR, "var", "stat.. Django Deployment with Nginx and Gunicorn 1. Nginx 설치, 설정 설치 sudo apt-get update sudo apt-get install nginx 설정 sudo nano /etc/nginx/sites-available/default server { listen 80; server_name your_domain_name.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 설정후 nginx 재시작 sudo systemctl restart nginx 2. Gu.. Python, Django: request QueryDict 다루기 # AttributeError: This QueryDict instance is immutable Django 프로젝트에서, front에서 요청받은 request.POST의 query dictionary를 unpack해서 data를 생성할 때 (예: MODEL.objects.create(**request.POST)) request.POST에서 특정값만 없애고 unpack을 해서 사용하려는 경우, 다음과 같이 시도해보면 not_null_list = ['name','amount', 'period'] missing_item = next((item for item in not_null_list if not request.POST.get(item)), None) del request.POST['action'] Fruit.objects.create(**request.POST) raise AttributeErro.. Django: DB migrations 기록 지우기 Django를 통해 DB 설계를 한 경우 DB의 table에 django_migrations라는 table 생성됨 migrate를 하는 경우에 DB에 그 기록이 저장이 되는 table (migration 오류가 나는 경우에) 해당 table의 특정 app 내의 migration 기록을 지우는 방법 1. Django shell 이용 (터미널) $ python manage.py shell $ from django.db.migrations.recorder import MigrationRecorder $ from django.db import connection $ recorder.Migration.objects.filter(app='').delete() 2. Script로 지우기 from django.db.m.. Django Template: linebreaks vs linebreaksbr Django에서 테이블의 field가 TextField인 경우, 값을 줄바꿈을 해서 저장하는 경우가 있습니다. 이를 Template으로 불러올때, 저장된 줄바꿈을 반영해주기 위해서는 템플릿에서 불러올때 {{some_text|linkebreaks}} // or {{some_text|linebreaksbr}} 위와 같이 필터를 적용해줘야 줄바꿈을 해줄수 있습니다. 이때 linebreaks와 linebreaksbr의 차이는 linebrekas의 경우 some_text에 한줄마다 태그를 입혀서 줄바꿈을 적용합니다. linebreaksbr의 경우 some_text에 있는 한줄마다 태그로 감싸서 줄바꿈을 적용용 합니다. *실제 예시 {{some_text|linebreaksbr}} {{some_text|linebre.. Python: Selenium in Linux # WSL # chromedriver # 예제 코드 Windows에서는 기존에 selenium을 이용하는 python script가 있는 경로에 chromedriver에 위치해놓고 썼다.Linux, 특히 WSL 환경에서 Selenium을 사용하기 위한 방법을 살펴보자 1. chromedriver linux 용을 설치 - 압축 해제 후 chromedriver를 /usr/local/bin에 옮기자sudo mv /home/usr/chromedriver /usr/local/bin/2. 실행권한 주기sudo chmod +x /usr/local/bin/chromedriver* 그외 다른 경로에 넣고 실행하고 싶으면 그 경로 PATH에 등록export PATH=$PATH:/home/user/some_path 아래는 WSL에서 쉽게 마주할 수 있는 에러이다.위와 같이 .. 이중 삼중 for문 break # forloop # break 이중 for문을 한번에 두개를 break 해서 빠져나가야할 경우 Tip 변수값에 변화를 줘서 그 변수값을 기준으로 break for i in list_one: for j in list_two flag = False for h in list_three: if some conditon: print("Break!") flag = True break if flag: break flag = False로 두고 flag = True가 되었을 때 바깥 for문에서 break Python: 동적으로 변수 이용 # 전역변수, 지역변수, globals(), locals(), importlip, getattr * globals, locals f'{model_name}Form' 위와 같은 형태의 이름 가진 class Form을 동적으로 가져와서 이용하려고 할 때, import를 통해 전역변수에 위 이름을 가진 변수가 있으면 다음과 같이 globals() 사용 가능 globals()[f'{model_name}Form'] globals() 전역변수 접근 locals() 지역변수 접근 globals는 전역변수에 대한 접근 자체가 보안 위험이 있을 수 있으므로 importlib으로 호출을 해서 getattr 을 이용하는게 좀 더 안전한 방법 * importlib import importlib def book_list(request, model_name): form_module = importlib.import_modu.. 이전 1 ··· 4 5 6 7 8 9 10 ··· 12 다음