python + Django

Templates, DB, admin

mooooon 2019. 1. 20. 04:14

● Templates

: HTML은 정적이고 파이썬은 동적으로써 HTML에 파이썬 코드를 직접 입력할 수 없다.

  템플릿 태그는 파이썬 코드를 HTML로 변환하여 동적인 사이트를 만들 수 있게 한다.


참고 : https://tutorial.djangogirls.org/ko/django_templates/


- for문, if문, 변수, extends등의 기능을 사용할 수 있다.

참고 : https://docs.djangoproject.com/en/2.1/ref/templates/language/


- extends 사용법

* views.py에서는 index.html을 호출한다.


1. index.html

<!DOCTYPE html>

<html lang="en" dir="ltr">

  <head>

    <meta charset="utf-8">

    <title>index page</title>

  </head>

  <body>

    {% block body %}            <  body 부분은 사용자 정의 부분으로 임의로 변경가능

    {% endblock %}

  </body>

</html>


2.inner.html
{% extends "inner.html" %}
{% block body %}
  <h1>hello world</h1>
{% endblock %}



● ORM(Object-Relational Mapping)

: Object에 대한 정의를 바탕으로, DB에 맵핑해주는 방식


- models.py에 다음과 같이 정의한다.

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

- 위 코드는 아래의 코드와 동일한 코드이다.

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

* id는 자동으로 생성된다. (primary key)

* 기본적으로 Django에서는 sqllite3를 사용하고 있다.

참고 : https://docs.djangoproject.com/en/2.1/topics/db/models/


- _initial.py 폴더에서 migtaion에 대한 세부내용을 확인할 수 있다.


● admin

: Django에서는 기본적으로 관리자 페이지를 제공한다.

- settings.py

INSTALLED_APPS = [

    'django.contrib.admin',    << 관리자

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'website',

]


- 관리자 페이지에서는 User, Group, Models를 관리할 수 있다.

* 처음 관리자 페이지를 들어오게 되면 Models를 관리하는 페이지를 찾아볼수 없다. 따로 설정해야 한다.

> 앱폴더에서 admin.py에서 아래 코드를 입력한다.


from .models import *


# Register your models here.

class PersonAdmin(admin.ModelAdmin):

    pass

admin.site.register(Person, PersonAdmin)


* 위 설정을 통해서 관리자 페이지를 들어가게 되면 데이터를 구분하지 힘들다



위와 같은 문제를 해결하기 위해서

models.py에 아래 코드를 입력한다.


class Person(models.Model):

    first_name = models.CharField(max_length=30)

    last_name = models.CharField(max_length=30)


    def __str__(self):

        return '%s %s' % (self.first_name, self.last_name)



● shell

: manage.py shell 명령어를 통해서 shell실행

- shell 을 통해서 데이터를 추가, 삭제 ,변경 등의 작업을 수행한다.


1. 생성

from 앱명칭.models import Person (사용자 정의)

p = Person(first_name="이름" , last_name="성")  << 객체생성

p.save()     <<  DB에 저장


2. 변경

p.first_name = "변경 이름"

p.save()     <<  DB에 저장


3. 삭제

p.delets()

p.save()     <<  DB에 저장


4.조회(queryset)

temp = Person.objects.all()  << 전체 조회

temp.filter(first_name="이름") << 조건 조회


참고 : https://docs.djangoproject.com/en/2.1/ref/models/querysets/