728x90
Django
특징
- 오픈소스, flask보다 사용자가 더 많아서 자료 찾기가 편리함
- flask보다 약 10배 많은 코드 라인으로 개발해서 더 무거움(full stack web framework)
- 프레임워크가 복잡하지만 틀에 맞추면 쉽게 큰 프로젝트도 가능(자유도가 적음)
- 속도가 더 빠름(근데 상관없다고함)
- RDBMS와의 상호 작용을 완전히 지원하는 기본 내장 ORM과 함께 제공.이 ORM은 마이그레이션 생성 및 관리도 지원. 내장 된 유효성 검사를 사용하여 데이터베이스 모델을 만드는 것이 상대적으로 더 편안함.
-유지 보수하기편함 - django는 자동으로 관리자 화면을 구성(admin 페이지를 말하는거 같다)Instagram, Spotify, YouTube, Dropbox, Bitbucket, Eventbrite...
- Django를 사용하는 사이트
Flask
- 오픈소스, Django보단 상대적으로 사용자가 적음.
- Django의 1/10수준으로 가벼움
- 매우 가볍고 심플한 Framework를 지향하는 점이 특징(Micro framework)
- Flask는 기본 기능 제공에 다양한 확장 모듈을 이용할 수 있는 구조여서 자유도가 높음
- Flask에는 DB ORM 구조가 따로 존재 하지 않음. 개발자가 원한다면 ORM 지원 패키지를 선택해서 사용하면 된다. (보통 SQLAlchemy 를 사용한다)
- REST API 서버처럼 요청과 응답이 매우 확정적인 경우에는 가볍고 군더더기 없는 Flask 개발이 더 효율적
Flask를 사용하는 사이트
Flask를 사용하는 회사 중 일부는 Reddit, Mailgun, Netflix, Airbnb 등입니다.
https://velog.io/@gigymi2005/Django-%EC%99%80-Flask-%EB%B9%84%EA%B5%90
Django 와 Flask 비교
파이썬 프레임워크끼리의 비교!
velog.io
-Django 설치
cmd나 anaconda prompt 관리자 권한으로 실행(아나콘다를 권장)
pip install django(==4.0.3)
이클립스에서 설치되었는지 확인
-Window =>Proferences
프로젝트 생성>Run As>1 PyDev: Django
>이클립스에 뜨는 주소 복사 후 웹에 붙여넣기
*urls에 urlpatterns 추가하기
"""HELLODJANGO URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
import HELLODJANGO.views
urlpatterns = [
path('admin/', admin.site.urls),
#'경로(url)',폴더이름.모듈이름.함수이름
path('hello', HELLODJANGO.views.hello),
path('myparam', HELLODJANGO.views.myparam),
path('param', HELLODJANGO.views.param),
path('db', HELLODJANGO.views.db),
path('db2', HELLODJANGO.views.db2),
path('forward', HELLODJANGO.views.forward),
path('emp', HELLODJANGO.views.emp),
]
-hello.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello Django.")
-daoemp.py
import pymysql
class DaoEmp:
def __init__(self):
self.con = pymysql.connect(host='127.0.0.1', user='root', password='python',
db='python', charset='utf8', port=3305) # 한글처리 (charset = 'utf8')
#DictCursor은 json이랑 비슷한 형식
self.cur = self.con.cursor(pymysql.cursors.DictCursor)
def mylist(self):
sql = "SELECT * FROM EMP"
self.cur.execute(sql)
mylist = self.cur.fetchall()
return mylist
def myone(self,e_id):
sql = f"""SELECT E_ID,E_NAME,SEX,ADDR FROM EMP where e_id='{e_id}'"""
self.cur.execute(sql)
myone = self.cur.fetchall()
return myone[0]
#소멸자 GC없어서 메모리를 소멸시켜줘야함
def __del__(self):
self.cur.close()
self.con.close()
def myinsert(self,e_id,e_name,sex,addr):
sql=f"""insert into emp(e_id, e_name, sex, addr)
values('{e_id}','{e_name}','{sex}','{addr}')"""
cnt = self.cur.execute(sql)
self.con.commit()
return cnt
def myupdate(self,e_id,e_name,sex,addr,e_id2):
sql = f"""update emp
set e_id='{e_id}',e_name='{e_name}',sex='{sex}',addr='{addr}'
where e_id='{e_id2}'"""
emp=self.cur.execute(sql)
self.con.commit()
return emp
def mydelete(self,e_id):
sql = f"""delete from emp where e_id='{e_id}'"""
emp = self.cur.execute(sql)
self.con.commit()
return emp
if __name__ == '__main__':
de = DaoEmp()
list = de.mylist()
#print("list",list[3]["addr"])
# emp=de.myone('3')
# print("emp",emp)
cnt=de.myinsert('5','5','5','5')
print("cnt",cnt)
# emp=de.myupdate('7', '7', '7', '7', '5')
# print("emp",emp)
# emp = de.mydelete('2')
# print("emp : ",emp)
-views.py
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
import pymysql
from HELLODJANGO.daoemp import DaoEmp
from aiohttp.client import request
from django.shortcuts import render
def hello(request):
return HttpResponse("Hello World.")
def myparam(request):
a=request.get.get("a","000")
return HttpResponse("myparam :"+a)
#템플릿을 사용하지 않는 상황에서 csrf 공격에 대해서 방어하기 위해 csrf 를 비활성화
@csrf_exempt
def param(request):
a=request.POST.get("a","000")
return HttpResponse("param"+a)
def db(request):
# STEP 1
# STEP 2: MySQL Connection 연결
con = pymysql.connect(host='127.0.0.1', user='root', password='python', db='python', charset='utf8', port=3305) # 한글처리 (charset = 'utf8')
# STEP 3: Connection 으로부터 Cursor 생성
cur = con.cursor()
# STEP 4: SQL문 실행 및 Fetch
sql = "SELECT * FROM EMP"
cur.execute(sql)
db=cur.fetchall()
# 데이타 Fetch 요거
# res="<table border='1' width ='500' height='300' align = 'center'><th>e_id</th><th>e_name</th><th>sex</th><th>addr</th>"
# for idx in db:
# e_id = idx [0]
# e_name = idx [1]
# sex = idx [2]
# addr = idx [3]
# res += "<tr><td>" + e_id + "</td><td>"+ e_name +"</td><td>"+ sex +" </td><td>"+ addr +" </td></tr>"
# res+="</table>"
# return HttpResponse("db"+res)
# STEP 5: DB 연결 종료
cur.close()
con.close()
def db2(request):
de =DaoEmp()
list = de.mylist()
txt = ""
for e in list:
txt +="{},{},{},{}<br/>".format(e['e_id'],e['e_name'],e['sex'],e['addr'])
return HttpResponse(txt)
def forward(request):
mylist =[
{'e_id':'1','e_name':'1','sex':'1','addr':'1'},
{'e_id':'2','e_name':'2','sex':'2','addr':'2'},
{'e_id':'3','e_name':'3','sex':'3','addr':'3'}
]
a="홍길동"
b={"전우치","신사임당","허균"}
data={
'a':a,
'b':b,
'mylist':mylist
}
return render(request,"forward.html",data)
def emp(request):
de= DaoEmp()
mylist=de.mylist()
data={
'mylist':mylist
}
return render(request,"emp.html",data)
-templates>emp.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
FORWARD2<br/>
<table border='1'>
<th>e_id</th><th>e_name</th><th>sex</th><th>addr</th>
{%for e in mylist%}
<tr>
<td>{{e.e_id}}</td>
<td>{{e.e_name}}</td>
<td>{{e.sex}}</td>
<td>{{e.addr}}</td>
</tr>
{%endfor%}
</table>
</body>
</html>
-templates>forward.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
FORWARD<br/>
a : {{a}}<br/>
b :
{%for i in b%}
{{i}}<br/>
{%endfor%}
<table border='1'>
<th>e_id</th><th>e_name</th><th>sex</th><th>addr</th>
{%for e in mylist%}
<tr>
<td>{{e.e_id}}</td>
<td>{{e.e_name}}</td>
<td>{{e.sex}}</td>
<td>{{e.addr}}</td>
</tr>
{%endfor%}
</table>
</body>
</html>
728x90
'ddit > Python' 카테고리의 다른 글
220907파이썬, DJango에서 ajax 사용해보기 (0) | 2022.09.13 |
---|---|
220906파이썬 web과 MariaDB연동하기 (0) | 2022.09.07 |
MariaDB MySQL과 Python연동하기 (0) | 2022.09.05 |
Python PyQt designer (0) | 2022.09.05 |
파이썬 def, 다중상속, 생성자와 소멸자 (0) | 2022.08.26 |