/python

python

MIT LicenseMIT

python

Part I. 파이썬 3.7 설치 (ubuntu 18.04 LTS)

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt update
$ sudo apt install python3.7
$ python3.7 --version

$ nano ./.bash_aliases 
alias python=python3.7
alias pip=pip3

$ source ./.bash_aliases

$ sudo apt install python3-pip
$ sudo apt install python3.7-venv

$ mkdir workspace/
$ cd workspace/
$ mkdir django
$ cd django
$ python -m venv myvenv
$ source myvenv/bin/activate
$ pip --version
 pip 10.0.1 from /hom
$ pip install django
$ deactivate

#생성
 $ pip freeze > requirements.txt

 #설치
 $pip install -r requirements.txt

Part II. 장고 웹서버 실행

$ cd workspace/django
$ source myvenv/bin/activate
$ django-admin startproject start
$ cd start
$ python manage.py runserver 0.0.0.0:8000

Part III. 장고 웹서버 첫 프로젝트 생성

$ python manage.py startapp hello

#Seoul Time zone
$ nano hello/settings.py
LANGUAGE_CODE = 'ko'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = False 

$ nano hello/models.py

from django.db import models
# Create your models here.
class Candidate(models.Model):
	id = models.AutoField(primary_key=True)
	title = models.CharField(max_length=20)
	introduction = models.TextField()
	created_at = models.DateTimeField(auto_now_add=True)

	def __str__(self):
    	return self.title
    
$ nano hello/admin.py    
from django.contrib import admin
from .models import Candidate #앞에서 만든 Post모델을 가져온다.

# Register your models here. 
admin.site.register(Candidate) #만든 모델을 관리자 페이지에서 볼려면!   

$ nano hello/views.py

from .models import Candidate #models에 정의된 Candidate를 불러온다

def notice(request):
	if (DEBUG): print("Method: ", request.method)
    candidates = Candidate.objects.all()[0:3]
    context = {'candidates':candidates}

if request.method == "POST":
    if (DEBUG): print("userId: ", request.POST["email"])	
        return redirect('main')
return render(request, 'notice.html', context)

$ nano templates/notice.html
{% for candidate in candidates %} 
<div class="card">
    <div class="card-header" id="headingOne">
        <h5 class="mb-0">
        <button class="btn btn-link" type="button" data-toggle="collapse"
        data-target="#ab{{candidate.id}}" aria-expanded="false"
        aria-controls="collapseOne">
        {{candidate.title}} / {{candidate.created_at}}
        </button>
        </h5>
    </div>
    <div id='ab{{candidate.id}}' class="collapse" aria-labelledby="headingOne"
       data-parent="#accordion">
          <div class="card-body">
              {{candidate.introduction}}
          </div>
     </div>
 </div>
 {% endfor %}

$ python manage.py createsuperuser

db 테이블 생성 후 최종 디비에 반영하기    
$ python manage.py makemigrations
$ python manage.py migrate

http://sotolab.com:8000/admin/

Part IV. 배포

I. package를 통한 nginx 설치
package를 이용하여 nginx를 설치한다.

$ sudo apt update
$ sudo apt install nginx
$ nginx -v
nginx version: nginx/1.4.6 (Ubuntu)

$ sudo service nginx start

$ sudo service nginx status
 * nginx is running


http://localhost/
Welcome to nginx!
If you see this page, the nginx web server is successfully

II. Nginx Setting
Django를 이용해서 서버에 요청을 보낼 수 있도록 Nginx 설정 파일을 생성한다.

/etc/nginx/sites-available/sotolab

server {
    listen 80;
    server_name sotolab;

    location / {
        proxy_pass http://localhost:8000;
    }
}
이 설정은 로컬 포트 8000으로 들어오는 모든 요청을 Django로 보내서 응답하도록 한다


$ sudo ln -s /etc/nginx/sites-available/sotolab /etc/nginx/sites-enabled/sotolab
$ ls -l /etc/nginx/sites-enabled


$ sudo rm /etc/nginx/sites-enabled/default


$ sudo service nginx reload

$ cd workspace/django
$ source myvenv/bin/activate
$ cd start_django
$ python manage.py runserver