๐ ๊ฐ์
django๋ก ์น ์๋น์ค๋ฅผ ๋ง๋ค์ด ๋ณด๋ฉด์ ๋น๋๊ธฐ ๋ฐฉ์์ ์ ์จ๋ณผ ์๊ฐ ์๋ค. ๊ทธ!๋!์! ๋น๋๊ธฐ ํต์ ๋ฐฉ์์ผ๋ก ๋ง์ด ์ด์ฉํ๊ณ ์๋ jquery์ ajax์ ์ ๋ง ๊ธฐ์ด์ ์ด ์ฌ์ฉ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๊ณ ํ๋ค. ํน์๋ผ๋ ๋์์ด ๋๋ ๋ถ๋ค์ด ์์๊น๋ด ํฌ์คํ
ํ๊ฒ ๋์๋ค.(์ฌ์ค ๋ด๊ฐ ๋ชจ๋ฅด๊ณ ์์ด์ ์ ๊น๋จน์ผ๋ ค๊ณ ..)
์์ํ๊ธฐ ์์, ajax๊ฐ ๋ญ๊น?๋ผ๋ ์๊ฐ์ด ๋จผ์ ๋ ๋ค.
Ajax(Asynchornous Javascript And XML)๋?
AJAX๋, JavaScript์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ค ํ๋์ด๋ฉฐ Asynchronous Javascript And Xml(๋น๋๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์ xml)์ ์ฝ์์ด๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ์ ์ฒด ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์น์ง ์๊ณ ๋ ํ์ด์ง์ ์ผ๋ถ๋ง์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๊ธฐ๋ฒ ์ด๋ฉฐ JavaScript๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ํต์ , ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ XML ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์ ์ด๋ค.
์ฆ, ์ฝ๊ฒ ๋งํ์๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๊ฒ์ด๋ค.
๐ Vใ ๋ฆฌ ๊ฐ๋จํ ์ฌ์ฉ๋ฒ.
๋๋ฌด ์ฌ์ฐ๋ฏ๋ก ๋ฌป๊ณ ์ฝ๋๋ก ๊ฐ๋ค.
1๏ธโฃ html ๋ถ๋ถ
<!-- head ๋ถ๋ถ -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- body ๋ถ๋ถ -->
<script type="text/javascript">
$('#submit').on('click', function(e) {
data = $('#text').val();
$.ajax({
type:'POST',
url:'127.0.0.1:8000/home',
data:JSON.stringify(data),
success:function(json){
console.log("data pass success",json);
},
error : function(xhr,errmsg,err) {
console.log(xhr.status + ": " + xhr.responseText);
}
});
});
</script>
ajax ๋ถ๋ถ์ ์ํ๋ ์ด๋ฒคํธ function(์ ์์ ์์ submit click์)์์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์ค๊ฐ์ค๊ฐ ๋์ค๋ $๋ jquery ๋ฌธ๋ฒ์ด๋ค.
โ jquery๋?
- ์น์ฌ์ดํธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ๊ฒ ํ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ์คํ์์ค ๊ธฐ๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
- ๊ฐ๋จํ๊ฒ ์นํ์ด์ง ์์์ $ ๋ฅผ ์ฌ์ฉํด์ Element๋ฅผ ์ฝ๊ฒ ์ฐพ๊ณ ์กฐ์ํ ์ ์๋ค.
- $('#foo') = id๊ฐ foo ์ธ Element
- $('.foo') = class๊ฐ foo ์ธ Element
โ data:JSON.stringify(data) ์์ JSON.stringify๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์์ฒญ์ ๋ฐ๋ views.py์์ json ํ์ฑ์ ์์ํ๊ฒ ํ๊ธฐ ์ํด strํํ๋ก ๋ง๋ค์ด์ ๋ณด๋.
2๏ธโฃ ์์ฒญ์ ๋ฐ๋ views.py ๋ถ๋ถ
from django.http import JsonResponse
def home(request):
# POST ์์ฒญ์ผ ๋
if request.method == 'POST':
data = json.loads(request.body)
# do something
print(data)
context = {
'result': data,
}
return JsonResponse(context)
home function์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ json.loads๋ก dic๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ ๊ฒ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฆฌ์กฐ๋ฆฌ ์กฐ๋ฆฌํ๊ณ , ๋ค์ ๊ฒฐ๊ณผ๊ฐ์ dictํํ๋ก ๋ง๋ค์ด์ JsonResponse๋ฅผ ์ด์ฉํด์ ์ ๋ฌํ๋ค.
โ flask ์ธ ๋์ฒ๋ผ ๊ทธ๋ฅ return json.dumps(context)๋ฅผ ํด์ ๋ณด๋ด๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฌ๋ค..
AttributeError: 'str' object has no attribute 'get'
[20/Mar/2021 11:36:08] "POST /home HTTP/1.1" 500 60851
๐ค ๋ง๋ฌด๋ฆฌ
์์ฃผ ๊ธฐ์ด์ ์ธ ๋ถ๋ถ์ธ๋ฐ ์ด๋ฐ ๊ฒ์ ๋งํ์ ์๊ฐ์ ๋ป๊ฒผ๋, ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์๋๋ฐ ์ด๋ ต๊ฒ ํ๋ ๋ด ์์ ์ด ๋ถ๋๋ฝ๊ธด ํ์ง๋งโฆ ๊ทธ๋๋ ์ด๋ฐ ๊ธฐํ๋ฅผ ํตํด ์๊ฒ ๋๋ค!! ์๊น๋จน๊ธฐ ์ํด์ ํฌ์คํ ์ ๋ง์ด๋ง์ด ํด๋์..๐ข
reference
'python > django' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[django] mysql + docker-compose (1) | 2022.12.25 |
---|---|
[django] Forbidden (CSRF token missing or incorrect.) ํด๊ฒฐํ๊ธฐ! (2) | 2021.03.20 |