[코딩온] 장고 강좌 11

TonyHan·2021년 1월 21일
0

Jinha Template

flask : 파이썬 기반의 웹프레임워크 중 하나이다. 쉽고 빠르다.
django : 복잡하지만 조금 더 많은 기능을 구현할 수 있다.

jinja template(Django Template) : html문서의 한계를 뛰어 넘기위해 고안된 양식.

  • 기존의 한계1 : 정적이다. -> 템플릿 파일을 열 때 뷰에서 인자를 전달하여 템플릿에서 호출하도록 하자 render("a.html","길동")
  • 한계2 : 반복코드

동적인 코드를 간단하게 구현하기 위해서 만들어 졌다.

<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>

url 응용 : 접속 방법 설정

사용자의 입력에 따라 다른 기능 제공하기

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}")

form으로 정보 보내기

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 사용자'
profile
신촌거지출신개발자(시리즈 부분에 목차가 나옵니다.)

0개의 댓글