Django - 搜索页面的制作
目录(想起来在写
这是问题
- 遇到的问题
– HTTP 请求GET
– 如何获取前端数据
第一次尝试
毕竟我懒得用Django做,于是便研究起了bing网站搜索的请求
这不是GET请求嘛,那好说了,看一下bing官网搜索栏的name=‘q’
那就直接把html文件改了好了
<input type="text" name="q">
这样就有了 ?q=这一项了
然后就是后面那一串&q=dog&qft=+filterui:color2-bw&FORM=IRFLTR
起初,我发现我的地址栏是这样的
后面这个bw=aaa引起了我的注意
来源是.html文件中,单选框的位置
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="bw" value="aaa">
<label>黑白</label>
</div>
</div>
于是,我想直接把后面那串都填到name里面
<input type="radio" name="&q=dog&qft=+filterui:color2-bw&FORM=IRFLTR" value="">
(就长这个鬼样子.jpg
这个鬼样子要是可以的话我就真的…太开心了(梦回现实的掌.avi,试图打醒自己
但是传地址的时候
https://cn.bing.com/images/search?&q=dog%26q%3Ddog%26qft%3D%2Bfilterui%3Acolor2-bw%26FORM%3DIRFLTR
地址变成这样了(抓狂and 绝望
第二次尝试
没办法,用Django吧,你问我为啥用Django,因为我最近刚好在学啊 ,,,(别的我也不会呀
加个视图函数,感觉自己好聪明啊,,,(第一次写的时候真的以为这样就得了
views.py
def search(request):
context = {}
if (request.method=='GET'):
print(request.GET.get('q'))
text = request.GET.get('q')
choice = request.GET.get('choice')
# print(type(request.GET.get('choice')))
if (choice=="1"):
return redirect("https://cn.bing.com/images/?q="+str(text)+"&qft=+filterui:color2-color&FORM=IRFLTR")
else:
return redirect("https://cn.bing.com/images/?q="+str(text)+"&qft=+filterui:color2-bw&FORM=IRFLTR")
结果肯定是不行啊,直接从URL到这个search页面也是GET请求啊,这样有啥问题呢,不会出现搜索的页面,直接跳转到text=空的bing搜索页面了
我方了,两个都是GET请求啊,咋办
开始我想到一个很脑残的办法
不是两次GET嘛
1.第一次GET请求就渲染search页面
2.第二次在进行请求的时候redirect到bing的搜索页面
感觉这个想法虽然有点取巧但是有用就行(毕竟我那么懒
可是!行不通
为啥行不通我是不知道,好像第一次GET渲染了那个搜索页面之后我设置的那个计数器因为函数已经返回了所以就结束了,,不会出现第二次请求这种东西
于是有了第三次尝试
第三次尝试
既然没办法判断是第几次GET请求,那么,判断搜索栏的内容是否为空总行吧
if (request.method=='GET' and request.GET.get('q')):
print(request.GET.get('q'))
text = request.GET.get('q')
choice = request.GET.get('choice')
# print(type(request.GET.get('choice')))
if (choice==1):
return redirect("https://cn.bing.com/images/?q="+str(text)+"&qft=+filterui:color2-color&FORM=IRFLTR")
else:
return redirect("https://cn.bing.com/images/?q="+str(text)+"&qft=+filterui:color2-bw&FORM=IRFLTR")
return render(request,'search.html',context)
对应的html如下
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="choice" value="1">
<label>彩色</label>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="choice" value="0">
<label>黑白</label>
</div>
</div>
私想着,这样应该可以了吧
实际上也差不多了,但是出现了一个问题
choice == 1这个判断永远判断不成功
之后看了一下
choice = request.GET.get('choice')
print(type(request.GET.get('choice')))
才发现这玩意是个str
于是很简单了
choice == "1"