forms.HiddenInput()

view에 다음과 같이 해당 스팀 앱의 id를 적으면 json 형식으로

해당 앱의 정보를 받을 수 있게 구현했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def steam_app(request):

app_id = request.GET.get('search', 0)

url = 'http://store.steampowered.com/api/appdetails?appids='+ app_id +'&cc=kr'

req = requests.get(url)

if req.status_code == requests.codes.ok:
print("connect")

data = json.loads(req.text)

app_name = data[app_id]['data']['name']
app_image = data[app_id]['data']['header_image']
if data[app_id]['data']['release_date']['coming_soon']:
app_release_date = data[app_id]['data']['release_date']['date']+"(출시 예정)"
else:
app_release_date = data[app_id]['data']['release_date']['date']

try:
app_price = data[app_id]['data']['price_overview']['final_formatted']
except:
if data[app_id]['data']['is_free']:
app_price = "무료"
else:
app_price = "출시 예정"

app_link = "https://store.steampowered.com/app/" + app_id

app_data = {
"name": app_name,
"header_image": app_image,
"final_formatted": app_price,
"link": app_link,
"release_date": app_release_date
}

else:
print("disconnect")

return JsonResponse(app_data)

글을 작성하는 과정에서 게임을 검색하고 받은 json 데이터를 저장해야 했다.

그래서 form 안에서 input의 hidden 속성을 이용하여 구현하는데 검색을 하다보니

django forms의 widget에 hidden 속성을 줄 수 있었다.

1
2
3
4
5
6
def __init__(self, *args, **kwargs):
self.fields['app_name'].widget = forms.HiddenInput()
self.fields['app_image'].widget = forms.HiddenInput()
self.fields['app_price'].widget = forms.HiddenInput()
self.fields['app_link'].widget = forms.HiddenInput()
self.fields['app_release_date'].widget = forms.HiddenInput()

저렇게 했더니 개발자 도구를 불러서 보면

1
2
3
4
5
<input type="hidden" name="app_name" id="id_app_name">
<input type="hidden" name="app_image" id="id_app_image">
<input type="hidden" name="app_price" id="id_app_price">
<input type="hidden" name="app_link" id="id_app_link">
<input type="hidden" name="app_release_date" id="id_app_release_date">

라고 생성되어 있다!

그래서 model에서 검색된 앱 데이터를 저장할 수 있도록 5개의 필드를 확장했다.

그리고 json 데이터가 저장될 수 있도록 JQuery를 이용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
// json으로 받은 데이터(ajax 부분 생략)
name = data.name;
image = data.header_image;
price = data.final_formatted;
link = data.link;
release_date = data.release_date;

$('input#id_app_name').val(name);
$('input#id_app_image').val(image);
$('input#id_app_price').val(price);
$('input#id_app_link').val(link);
$('input#id_app_release_date').val(release_date);

</script>

이제 게시글을 수정하는 과정에서 저장된 앱 데이터를 그대로 불러오는 것을 해결해야 한다.

Share