Django-POST-GET

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,因为我最近刚好在学啊 ,,,(别的我也不会呀

然后呢html拖到模板文件夹就开始写view.py

加个视图函数,感觉自己好聪明啊,,,(第一次写的时候真的以为这样就得了

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"

Done!终于搞定了~

第一次写文章,想到哪里写到哪里,如有错误欢迎批评指正~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值