Python - Django
Django 설치 [바로가기]
Django 의 구조
모델의 변경을 만드는 세 단계의 지침을 기억하세요.
- (models.py 에서) 모델을 변경하거나 생성합니다.
- python manage.py makemigrations을 통해 이 변경사항에 대한 마이그레이션을 만드세요.
- python manage.py migrate 명령을 통해 변경사항을 데이터베이스에 적용하세요.
Django models add null field
class Person(models.Model):name = models.CharField(max_length=255) # 필수bio = models.TextField(max_length=500, blank=True) # 선택 (null=True를 넣지 말자)birth_date = models.DateField(null=True, blank=True) # 선택 (여기서는 null=True를 넣을 수 있다.)is_married = models.BooleanField()is_divorced = models.NumBooleanField()
Django CRUD
1-1post_instance = Post.objects.get(id=66)post_instance.title = 'edit title' # title 수정post_instance.save()1-2queryset = Post.objects.all()for post in queryset:post.tags = 'Python, Django'post.save() # 각 Model Instance 별로 DB에 update 요청 - 성능저하
queryset = Post.objects.all()queryset.update(title='test title') # 일괄 update 요청
Django models pprint Dict Type 사전타입 출력
import datetimefrom django.db import modelsfrom django.utils import timezone# Create your models here.class Member(models.Model):name = models.CharField(max_length = 20)# 이름으로 출력되도록 한다def __str__(self):return self.nameclass Question(models.Model):question_text = models.CharField(max_length = 200)pub_date = models.DateTimeField('date published')## Expression of Ofjectdef __str__(self):return self.question_textdef was_published_recently(self):return self.pub_date >= timezone.now() - datetime.timedelta(days = 1)class Choice(models.Model):question = models.ForeignKey(Question, on_delete = models.CASCADE)choice_text = models.CharField(max_length = 200)choice_prod = models.CharField(max_length = 200, default=None, blank=True, null=True)votes = models.IntegerField(default= 0)## Ecpression of Ofjectdef to_dict(self):return {'ID': self.id,'choice_text':self.choice_text,'choice_prod':self.choice_prod,'question': {'ID':self.question.id,'question_text':self.question.question_text,'pub_date':self.question.pub_date,}}def __str__(self):return self.choice_proddef __str__(self):return self.choice_text"""## 사전 타입 출력하기from assembly.models import Question, Choicefrom django.utils import timezonefrom pprint import pprintQuestion.objects.all().delete()questions = Question.objects.bulk_create([Question(id = i,question_text = 'question-{}'.format(i),pub_date = timezone.now(),)for i in range(1, 10)])Choice.objects.all().delete()Choice.objects.bulk_create([Choice(id = i,choice_text = 'choice-{}'.format(i),choice_prod = 'TV-{}'.format(i),)])"""
Django JOIN
Django UNION
SQLlite3 CRUD
import sqllite3conn = sqlite3.connect('assembly.db')cursor = conn.cursor()# Create table if not exists...cursor.excute('CREATE TABLE IF NOT EXISTS member(name text, code text)')# Insert a row of datamembers = [('홍길동', '12345'), ('김철수', '12345'), ('이명희', '12345')]cursor.executemany("INSERT INTO member VALUES (?, ?)", members)# Save (commint) the changesconn.commit()#Fetch data from Tablefor row in cursor.execute('SELECT * FROM member'):print(row)conn.close()
Django MariaDB(mysql)
pip install mysqlclientmyDjango/myDjango.settings.py...DATABASES = {'default': {#'ENGINE': 'django.db.backends.sqlite3',#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),'ENGINE': 'django.db.backends.mysql','NAME': 'db-name', #mysql'USER': 'db-user-name', #root'PASSWORD': 'db-password', #1234'HOST': 'db-adress', #공백으로 냅두면 default localhost'PORT': 'port-number' #공백으로 냅두면 default 3306}}....python manage.py makemigrations
python manage.py migrate
mysql -u user -p db
password:
show tables;
Django MariaDB(mysql) 비밀번호 관리
기본 설정은 위와 같지만 소스를 오픈 할경우 중요정보가 공개되어지므로 실제 사용은 아래와 같이 사용 한다.
프로젝트최상위폴더/mysql.ini 를 생성하고 아래와 같이 작성한다.
.gitignore에 mysql.ini를 등록해서 사용한다.
[client]
database = dbName
user = dbUser
password = dbPassword
default-character-set = utf8
myApp/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': os.path.join(BASE_DIR, 'mysql.ini'),
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", #Added set of Strict
},
'PORT': '3306',
}
}
Django templates
myProject/myApp/urls.py // 없으면 새로 만든다.
from django.urls import path
from . import views
urlpatterns = [
path(' ', views.index, name='index'),
]
myproject/myProject/urls.py
from django.contrib import admin
from django.urls import path, include
from myApp import index
urlpatterns = [
path(' ', index.MAIN),
path('admin/', admin.site.urls),
path('myApp/', include('myApp.urls')),
]
myProject/myApp/index.py // path(' ' , index.MAIN
from django.shotcuts import render
from django.views.generic import ListView
from .models import myModel
MAIN = ListView.as_view(model=myModel)
myProject/myApp/views.py // path('myApp/', include('myApp.urls')
from django.http import httpResponse
def index(request):
return HttpResponse("Hello , HttpResponse !!")
반복문 for
숫자 증가 시키기 내장함수 : forloop.counter 1씩 증가
나머지 구하기 내장함수 : divisibleby
데이터 테이블 형태로 뿌리기
python django form control (폼 다루기)
myapp/templates/main.html
<form action="submit" method="post">
<input type="text" name="info"><br>
<input type="submit" value="Submit">
</form>
myapp/urls.py
url(r'^submit', views.submit)
myapp/views.py
def submit(request):
info=request.POST['info']
# do something with info
'my_lesson > _Python' 카테고리의 다른 글
python - 콘솔 화면 지우기 (1) | 2019.07.20 |
---|---|
Python - Error Cheat sheets (0) | 2019.06.27 |
Python - C/C++ API Reference Manual Interface (0) | 2019.04.19 |
Python - C/C++ API Reference Manual Introduction (0) | 2019.04.19 |
Python- C/C++ API Reference Manual Sequence (0) | 2019.04.19 |
댓글