flask : 파이썬 기반의 웹프레임워크 중 하나이다. 쉽고 빠르다.
django : 복잡하지만 조금 더 많은 기능을 구현할 수 있다.
jinja template(Django Template) : html문서의 한계를 뛰어 넘기위해 고안된 양식.
동적인 코드를 간단하게 구현하기 위해서 만들어 졌다.
<html>
<head>
</head>
{{뷰에서전달한인자, 변수}}
{%
나 지금부터 템플릿 언어를 시작하겠다.
if 사용가능
for 사용가능
for문을
for i in ex_list
%}
<div></div>
{%
endfor
}%
</html>
render은 템플릿파일을 호출하는 것
render(인자이름,'내가 출력할 템플릿 폴더안의 파일', 변수)
from django.template import render,redirect
def index(request):
context=[]
return render(request,'index.html',context)
처음 사용할때는 for i in range(5) 가 작동안해서 이게 뭥미 했는데 알고보니 django views에서 딕셔너리를 넘겨주어야만 원하는 기능이 출력이 된다...
반드시 반드시! django가 설치된 서버에서 작동시키자. 그냥 로컬에서 하면 작동안한다.
views.py
def index(request):
context={"index_1":"코딩온","loop_1":range(10),"loop_2":range(10)}
return render(request,'210121(2).html',context)
210121(2)
{{index_1}} //변수 위치
<ul>
{% for i in loop_1 %} //loop_1은 range(10)을 보냈다.
<li>
{{i}}
</li>
{% endfor %}
</ul>
<ul>
{% for i in loop_2 %} //loop_2은 range(10)을 보냈다.
<li>
{{i}}
</li>
{% endfor %}
</ul>
사용자의 입력에 따라 다른 기능 제공하기
urls.py
from django.urls import path
from . import views
urlpatterns=[
path('<str:port_num>',views.result),
path('<int:port_num>',views.result),
path('<int:port_num>/result',views.result),
]
이 방식으로 다른 숫자 혹은 문자를 넣는 것으로 비슷한 주소도 다르게 처리할 수 있다. 실무에서는 그냥 다 문자로 받아버린다.
접속시 '아이피번호:8000/32'로 접속 할 수 있다.
def result(request,port_num):
response="You're looking t the result %s"
아래의 방식은 문자열에 있는 것을 넣는 것
# return HttpResponse(response % (port_num))
아래의 방식은 formmating 하는 것
return HttpResponse(response+f"{port_num}")
GET 방식 : 주소?이름1=값&이름2=값2
받을 때의 방식
Get["이름1"] = 값1 이 들어가 있음
def index(req):
#req에서 GET으로 넘어온게 있는지 확인
#id에 값이 있으면 저장, 없으면 그냥 빈칸, str로 데이터가 전송됨
num=req.GET.get('id','')
#얘는 확실하게 id 인자가 넘어온다고 가정한다.
num=req.GET['id']
#POST로 넘어온거 확인
num=req.POST.get('id','')
if(len(num)<1):
else:
데이터를 받아서 DB에 저장하는 부분을 확인해 보자
def signup(request):
# POST 방식 입력
if(request.method=='POST'):
username=request.POST['username']
email=request.POST['email']
#models의 class이다.
member=Members(
username=username,
useremail=email
)
# 그냥 이렇게 하면 insert문이 실행된다.
member.save()
# 딕셔너리를 만들어서 html에 보낸다.
res_data={}
res_data['res']='등록성공'
return render(request,'index.html',res_data)
return render(request, 'index.html')
그리고 DB는 실제 이렇게 설정해서 데이터를 받도록 제작되어 있다.
from django.db import models
# Create your models here.
class Members(lmodels.Mode):
username=models.CharField(max_length=64, verbose_name="사용자")
useremail=models.EmailField(max_length=128, verbose_name="이메일")
created=models.DateTimeField(auto_now_add=True, verbose_name="가입일시")
update=models.DateTimeField(auto_now_add=True, verbose_name="수정일시")
class Meta:
db_table="opentutorials_users"
verbose_name='오픈튜토리얼스 사용자'
verbose_name_plural='o2 사용자'