딱고의 ORM 베이스.
16052 단어 Django
ORM, 관계 객체 매핑(Object Relational Mapping)
두 가지 방법: 1, DB first 2, Code first(메인스트림)
기본 단계
클래스 만들기 app01/models.py
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
APP proj/settings를 등록합니다.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
데이터베이스 엔진 수정 settings.py django는 기본적으로 sqlite 데이터베이스를 사용합니다. 다른 데이터베이스에 저장된 데이터를 수정하려면 데이터베이스 엔진을 수정해야 합니다. 예를 들어 MySQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
}
PS: Django는 기본적으로 MySQLdb 모듈을 사용하여 MySQL을 연결하지만python3에는 이 모듈이 없기 때문에pymysql로 대체하여 프로젝트와 같은 이름의 폴더에 있는init__파일에 다음 코드를 추가합니다: import pymysql pymysql.install_as_MySQLdb () 명령 실행python 관리자.py makemigrations # 모든 models를 찾습니다.py, 해당하는migrations에서 000x 생성initial.py 파일, 데이터베이스 변화 기록 python 관리자.py migrate # 기준 000xinitial.py 파일, 데이터베이스 테이블 생성.
# model.py ,
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
email = models.CharField(max_length=60,null=True) # , null=True,
클래스에 따라 데이터베이스 테이블 - models.py
필드 유형
문자열 유형
CharField () # 문자 유형
- 매개 변수: max 필요length 매개 변수, 문자 길이가CharField(max length=10)와 같다는 것을 표시합니다
TextField () 텍스트 유형
EmailField() # Django Admin 및 ModelForm에서 인증 메커니즘 제공
IPAddressField() # Django Admin 및 ModelForm에서 인증 IPV4 메커니즘 제공
GenericIPAddressField(Field) # Django Admin 및 ModelForm에서 검증 Ipv4 및 Ipv6(권장)
URLField() # Django Admin 및 ModelForm에서 인증 URL 제공
SlugField () # Django Admin 및 ModelForm에서 검증 지원 문자, 숫자, 밑줄, 연결부호(빼기 기호) 제공
FilePathField() # Django Admin 및 ModelForm에서 폴더 아래 파일 읽기 기능 제공
- 매개변수:
path, 폴더 경로
match=None, 정규 일치
recursive=False, 아래 폴더로 전송
allow_파일 허용
allow_folders=False, 폴더 허용
PS: EmailField,GenericIPAddressField,URLField 등은django-admin에게만 사용할 때 특수 기능이 있습니다. 만약에 admin을 사용하지 않으면CharField와 마찬가지로 일반 문자열을 나타냅니다.
디지털 유형
정형
IntegerField(Field) - 정수열(기호가 있는) - 2147483648~2147483647
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) - 양의 정수 0~2147483647
SmallIntegerField(IntegerField): - 정수 -32768~32767
BigIntegerField(IntegerField): - 긴 정수(기호가 있는)-922372036854775808~9223372036854775807
부동점형
FloatField(Field)
# 10진수 소수점
- 매개변수:
max_digits, 소수점 총 길이
decimal_places, 소수점 길이
BinaryField # 바이너리 유형
부울 값
BooleanField(Field) - 부울 값 유형
NullBooleanField(Field) - 빈 부울 값일 수 있습니다.
* 사용자 정의 추가 열 (모델에 추가 열이 없으면 id라는 열이 자동으로 생성됩니다)
AutoField(primary key=True)는 primary 매개변수를 입력해야 합니다.key=True
시간 유형
DateTimeField(DateField) - 날짜 + 시간 형식 YYYYYY-MMM-DD H:MM [:ss[.uuuuuu]][TZ]
DateField - 날짜 형식 YYYYY-MM-DD
TimeField(DateTime Check Mixin, Field) - 시간 형식 HH:MM[:ss[.uuuuuu]]
DurationField(Field) - 긴 정수, 시간 간격, 데이터베이스에서bigint에 따라 저장되며, ORM에서 얻은 값은datetime입니다.timedelta 유형
필드 속성
null -> db를 비울 수 있는지 여부
default -> 기본값
primary_key-> 주 키
db_column='xxx'-> 열 이름
db_index=True -> 인덱스
unique
-> 고유 인덱스
unique_for_date -> 데이터베이스의 필드 [날짜] 부분에 유일한 인덱스를 만들 수 있는지 여부
unique_for_month -> 데이터베이스 필드 [월] 섹션에서 고유한 인덱스를 만들 수 있는지 여부
unique_for_year-> 데이터베이스에서 필드 [년] 부분에 유일한 인덱스를 만들 수 있는지 여부
auto_now_add -> 생성 시 자동 생성 시간
auto_now -> 업데이트 시 현재 시간으로 자동 업데이트
choices
-> django admin에 탭 조회를 피하기 위해 아래 상자를 표시합니다 (탭 조회 효율이 낮음)
blank -> django admin을 비울 수 있는지 여부
verbose_name -> django admin 표시 필드 중국어
editable -> django admin을 편집할 수 있는지 여부
error_메시지 -> django admin 오류 정보(부족)
help_text -> django admin 프롬프트
validators -> django form 사용자 정의 오류 정보(부족)
예:
from django.db import models
# Create your models here.
class UserInfo(models.Model):
# app01_userinfo
# id ( , )
username = models.CharField(max_length=32,blank=True,verbose_name=' ') # , ,
password = models.CharField(max_length=60, help_text='pwd')
email = models.EmailField(max_length=19,null=True,error_messages={'invalid': ' '}
caption = models.CharField(max_length=32,unique=True)
user_type_choices = ((1, ' '), (2, ' '),(3, ' '),) #
user_type_id = models.IntegerField(choices=user_type_choices,default=1)
ctime = models.DateTimeField(auto_now_add=True, null=True)
mtime = models.DateTimeField(auto_now=True, null=True)
'''
: mtime
obj=UserInfo.objects.filter(id=1).update(caption='CEO')
: mtime
obj=UserInfo.objects.filter(id=1).first()
obj.caption = 'CEO'
obj.save()
'''
클래스에 따라 데이터베이스 테이블의 데이터에 대해 각종 조작을 진행하다
-- views.py
from app01 import models
def orm(request):
#
models.UserInfo.objects.create(username='root',password='123')
dic = {'username': 'xxx', 'password': '666'}
models.UserInfo.objects.create(**dic)
obj = models.UserInfo(username='alex',password='123')
obj.save()
#
result = models.UserInfo.objects.all()
result = models.UserInfo.objects.filter(username='root',password='123')
print(result) # Django QuerySet ,,]>
for row in result:
print(row.id,row.username,row.password)
dic = {'name': 'xxx', 'age_gt': '19'}
models.User.objects.filter(**dic)
#
models.UserInfo.objects.filter(id=4).delete()
#
models.UserInfo.objects.filter(id=3).update(password="69")
# models.tb.objects.filter(id__gt=1) => select * from tb where id > 1
# models.tb.objects.filter(id__gte=1) => select * from tb where id >= 1
# models.tb.objects.filter(id=1) => select * from tb where id = 1
# models.tb.objects.filter(id__lt=1) => select * from tb where id < 1
# models.tb.objects.filter(id__lte=1) => select * from tb where id <= 1
외부 키 구속.
ForeignKey("PrimaryTable",to_filed='xxx')
from django.db import models
# Create your models here.
class UserGroup(model s.Model):
uid = models.AutoField(primary_key=True) # , primary_key=True
caption = models.CharField(max_length=32,unique=True)
class UserInfo(models.Model):
username = models.CharField(max_length=32,blank=True,verbose_name=' ')
password = models.CharField(max_length=60, help_text='pwd')
email = models.CharField(max_length=60)
user_group = models.ForeignKey("UserGroup",to_field='uid',default=1)
# default=1 ,django user_group user_group_id, user_group UserGroup (uid,caption,ctime,uptime)
from app01 import models
def orm(request):
models.UserInfo.objects.create(
username='root1',
password='123',
email="[email protected]",
user_group = models.UserGroup.objects.filter(id=1).first() # user_group_id = 1 ( )
)
user_list = Userinfo.objects.all()
for row in user_list:
print(row.user_group) # user_group UserGroup
print(row.user_group.id) # print(row.user_group_uid)
print(row.user_group.caption)
예: 사용자 관리
urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^login/', views.login),
url(r'^index/', views.index),
url(r'^user_info/', views.user_info),
url(r'^userdetail-(?P\d+)/', views.user_detail),
url(r'^userdel-(?P\d+)/', views.user_del),
url(r'^useredit-(?P\d+)/', views.user_edit),
]
view.py
from django.shortcuts import render,HttpResponse,redirect
def login(request):
models.UserGroup.objects.create(caption='DBA')
if request.method == "GET":
return render(request, 'login.html')
elif request.method == "POST":
# select * from user where usernam='x' and password='x'
u = request.POST.get('user')
p = request.POST.get('pwd')
# count = models.UserInfo.objects.filter(username=u, password=p).count()
obj = models.UserInfo.objects.filter(username=u, password=p).first()
if obj:
return redirect('/cmdb/index/')
else:
return render(request, 'login.html')
else:
# PUT,DELETE,HEAD,OPTION...
return redirect('/index/')
def index(request):
return render(request, 'index.html')
def user_info(request):
if request.method == "GET":
user_list = models.UserInfo.objects.all() # print(user_list.query)
group_list = models.UserGroup.objects.all()
return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list})
elif request.method == 'POST':
u = request.POST.get('user')
p = request.POST.get('pwd')
models.UserInfo.objects.create(username=u,password=p)
return redirect('/cmdb/user_info/')
def user_detail(request, nid):
obj = models.UserInfo.objects.filter(id=nid).first()
# models.UserInfo.objects.get(id=nid) # ,
return render(request, 'user_detail.html', {'obj': obj})
def user_del(request, nid):
models.UserInfo.objects.filter(id=nid).delete()
return redirect('/cmdb/user_info/')
def user_edit(request, nid):
if request.method == "GET":
obj = models.UserInfo.objects.filter(id=nid).first()
return render(request, 'user_edit.html',{'obj': obj})
elif request.method == "POST":
nid = request.POST.get('id')
u = request.POST.get('username')
p = request.POST.get('password')
models.UserInfo.objects.filter(id=nid).update(username=u,password=p)
return redirect('/cmdb/user_info/')
index.html
Title
Deployment
user_info.html
Title
Deployment
user_detail.html
Title
Deployment
user_edit.html
Title
Deployment
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.