댕고의 일상 - 1
댕고의 일상 - 1
딱고 중에 제일 많이 쓰는 세 가지.
앞서 우리는 Django의 설치와 창설, 그리고 그 기본 원리를 소개했다. 이어서 우리는 Django에서 흔히 볼 수 있는 몇 가지 물건을 점차적으로 소개했다. 다음 세 가지는 보통 반환값으로 쓰인다.
HTTPresponse
문자열 되돌리기
return HttpResponse('hello world~')
# , , ,
render
웹 페이지를 되돌리는 데 쓰일 때, 이 용도는 비교적 크다. 예를 들어
def reg(request):
return render(request,'reg.html')
# request , reg.html , , , , .
redirect
리디렉션, 리디렉션의 개념은 우리가 이전에 http 프로토콜을 소개했을 때 소개했기 때문에 리디렉션을 정의하면 현재 웹 페이지를 리디렉션 후의 웹 페이지로 바로 전환할 수 있다.
def home(request):
return redirect('https://baidu.com')
#
정적 파일 관련
사이트에서 사용하는 정적 파일은 보통 다음과 같은 몇 가지를 포함한다. 즉, 자신이 쓴 JS, 자신이 쓴 CSS 또는 우리가 인용한 제3자 프레임워크,bootstrap,fontwesome,sweetalert 등이다.
이전에 우리는 제3자 프레임워크를 도입할 때 cdn으로 온라인 캐시된 파일을 선택하거나 다운로드해서 로컬의 정적 파일을 사용할 수 있다는 것을 알게 되었다.여기서 우리는 정적 파일을 선택한 후에 이 정적 파일을 하나의 폴더에 통일적으로 놓아야 한다. 보통 우리는 새로 만든static라는 폴더에 놓아야 한다. 일반적인 것은 이치에 맞지 않는다.
그러나 주의해야 할 점은 우리가 모든 정적 파일을 폴더에 던진 후에 Django는 이 경로를 정확하게 식별할 수 없다는 것이다. 우리가 html인터페이스에서 루트 디렉터리로 이 파일을 인용해도 안 되고 Django 자체를 찾을 수 없기 때문에 우리는 경로를 설정해야 한다.
정적 파일에 대한 접근 자원을 설정하는 것은 루트 디렉터리
settings.py
파일에서 마지막으로 볼 수 있습니다.# settings.py
STATIC_URL = '/static/'
# , ,
#
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), #
]
좋은 경로를 추가한 후에 html 파일을 도입하는 방식도 다음과 같이 바뀌어야 한다.
# **.html ,
{% load static %}
# , , .
form 폼의 get과post
form표는 우리가 앞부분을 익힐 때 배운 것으로 그 표준 양식은 다음과 같다.
신기한 리퀘스트
requests는 우리가views 방법을 쓸 때 괄호 안에 전달하는 매개 변수이다. 그 가장 큰 역할은 바로 전단과 후단 데이터의 상호작용을 책임지는 것이다. 후단에서 받는 전단의 정보는 거의 모두 Requests에서 나온다. Request는 하나의 대상이고 매우 전면적이고 강한 대상이다. 우리는 이 대상을 통해 많은 것을 지적할 수 있다. 예를 들어 다음과 같다.
request.MATE
# mate HTTP , k:v
request.scheme
# , , http https
request.path
# , , request.get_full_path()
request.encoding
#
request.session
# session, , , http ,
request.cookies
# session , session ,cookies
request.method
# ,GET POST
request.body
# ,
request.data
# , body , ,data
request.POST
# POST , , request.POST.get() , request.POST.getlist()
request.GET
# POST , GET()
템플릿의 값 전달 방식
def reg(request):
user_dict = {'name': 'jason', 'pwd': 123}
# 1
return render(request, 'reg.html', {'xxx': user_dict}) # user_dict reg.html , xxx
# 2
return render(request, 'reg.html', locals()) #
# locals() , , , , locals()
Django 연결 데이터베이스 및 강력한 ORM
우리는 데이터베이스가 하나의 서비스 측이라고 여길 수 있다는 것을 알고 있다. 우리는 Navicat으로 데이터베이스를 연결할 수도 있고 cmd 창으로 데이터베이스를 조작할 수도 있다. 마찬가지로 우리는 Django를 통해 데이터베이스를 연결하고 이를 조작할 수도 있다.
Django 데이터베이스 연결 사전 준비
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # MySQL,postgreSQL
'NAME': 'db1', #
'USER': 'root', #
'PASSWORD': 'root', #
'HOST': '127.0.0.1', #
'PORT': 3306, #
'CHARSET': 'utf8' #
}
}
__init__.py
에 아래 문장__init__.py
에 다음 문장import pymysql
pymysql.install_as_MySQLdb()
ORM 문 생성 테이블
Django 안의 ORM은 우리가 표를 만드는 데 도움을 줄 수 있지만 데이터베이스를 직접 만들 수 없기 때문에 우리는 먼저 수동으로 데이터베이스를 만들고 ORM을 통해 표를 만들어야 한다.
우선 우리는 app명의
models
에 데이터베이스에 추가해야 하는 표를 작성해야 한다. 각종 필드를 포함하고 예는 다음과 같다.from django.db import models
# Create your models here.
class Userinfo(models.Model):
# id Userinfo ,id int primary key auto_increment
# django ,django ORM id
id = models.AutoField(primary_key=True)
# username , username varchar(64) CharField max_lenth
# django ORM , char , django char
username = models.CharField(max_length=64)
# password , password int
password = models.IntegerField()
phone = models.BigIntegerField(default=110) # , , null,
addr = models.CharField(max_length=64, null=True) #
class Book(models.Model):
title = models.CharField(max_length=64)
상술한 종류를 정의한 후에 우리는 다음과 같은 두 문장을 통해 표를 진정으로 만들 수 있다
# cmd , Pycharm Terminal , ,
python manage.py makemigrations # , , (migrations )
python manage.py migrate # ORM
# : models.py , , , !!!
ORM 문의 데이터베이스에 대한 간단한 조작
여기에 가장 간단한 두 가지 조작, 즉 삽입과 조회를 소개한다
데이터 삽입
models.Userinfo.objects.create(username='admin', password='123')
# sql :insert into userinfo(username,password) values('admin','123');
# create ,
# , , ,
데이터 조회
# 1. get() , ( )
res = models.Userinfo.objects.get(username=username) # select * from userinfo where username = 'jason'
print(res)
print(res.username, res.password)
# 2. filter()
# , ,
# filter , and
# filter , , , [-1]
res = models.Userinfo.objects.filter(username=username, password=password)
# user_obj = res[0]
user_obj = res.first() # queryset
데이터 편집
def edit_user(request):
edit_id = request.GET.get('edit_id')# edit_id , ,
if request.method == 'POST':# POST , GET
#
username = request.POST.get("username")
password = request.POST.get("password")
'''
POST , GET '''
#
# :
models.Userinfo.objects.filter(pk=edit_id).update(username=username, password=password) # , update filter queryset
# : , , ,
# , , , update
# edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()
# edit_obj.username = username
# edit_obj.password = password
# edit_obj.save()
#
return redirect('/userlist')
# edit_id ,
edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()
return render(request, 'edit_user.html', locals())
데이터 삭제
def delete_user(request):
# id
delete_id = request.GET.get('delete_id')
models.Userinfo.objects.filter(pk=delete_id).delete() # , filter
return redirect('/userlist')
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.