Django--其他常用功能之保留原页面所有内容

博客核心内容:


1、Django–其他常用功能之保留原页面所有内容
2、简单版本


如何带着参数过去
如何将参数带回


代码示例:
部分1:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 我们工作中所说的Api其实指的就是url链接路由:http://127.0.0.1:8000/asset.html
    # 对于api我们既可以发送post请求,也可以发送get请求.
    url(r'^asset.html$', views.asset),
    url(r'^host_list.html$', views.host_list),
    url(r'^add_host.html$', views.add_host),
]

部分2:

from django.shortcuts import render,HttpResponse,redirect
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# Create your views here.


#通过装饰器避免了csrf_token攻击
@csrf_exempt
def asset(request):
    """
    我们通常情况下提交数据一般有两种方式:Ajax和Form表单的方式
    """
    if request.method == 'GET':
        return HttpResponse('GET 收到...')
    else:
        print(request.POST)
        # print(request.body)
        """
        <QueryDict: {'salary': ['2000'], 
                     'username': ['Angela'], 
                     'password': ['123456']}
        >
        <QueryDict: {'name': ['zhangming'], 
                     'page': ['10']}
        >
        注意:如果request.post里面没有值,我们就到request.body里面去拿
        b'{"password": "123456", "username": "Angela", "salary": 2000}'
        """
        return HttpResponse('POST 收到...')


from django.http.request import QueryDict

def host_list(request):
    print(request.GET,type(request.GET))
    """
    <class 'django.http.request.QueryDict'>
    """
    print(request.GET.urlencode())
    """
    <QueryDict: {'page': ['10'], 'name': ['zhangming']}>
    page=10&name=zhangming
    通过request.GET.urlencode()可以将具体参数值的信息获取到
    但是我们一般不用现成的,而是重新赋予一个变量
    This QueryDict instance is immutable:默认QueryDict()对象是不可以被修改的
    """
    obj = QueryDict(mutable=True)
    obj['_canshu'] = request.GET.urlencode()
    print(obj['_canshu'])
    url_params = obj.urlencode()
    print(url_params)  #_canshu=name%3Dzhangming%26page%3D10
    """
    page=10&name=zhangming
    url_params=page%3D10%26name%3Dzhangming
    %3D为=   %26为&
    此时params将作为一个变量等于后面的值
    """
    hosts = ['c1.com','c2.com','c3.com']
    return render(request,'host_list.html',{'hosts':hosts,'url_params':url_params})


def add_host(request):
    """
    接下来我们就要想着如何返回原来的页面
    """
    print(request.GET)
    """
    <QueryDict: {'_canshu': ['name=zhangming&page=10']}>
    """
    if request.method == 'GET':
        return render(request,'add_host.html')
    else:
        print('------')
        print(request.POST)
        """
        <QueryDict: {'csrfmiddlewaretoken': ['FmhpzJaCnoJhn2pxzAG70fBsescpBmFenNjS3Vtofm3hvXhfXXDnujIF25j7xuSg'], 'hostname': ['']}>
        """
        url_params = request.GET.get('_canshu')
        print('参数是》》》》')
        print(url_params)
        hostname = request.POST.get('hostname')
        print(hostname)
        url = "/host_list.html?"+url_params
        return redirect(url)

部分3:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     {# 注意:这里不能写action,这样的话才话向当前的url进行提交 #}
     <form method="POST">
         {% csrf_token %}
         <input type="text" name="hostname">
         <input type="submit" value="提交">
     </form>
</body>
</html>

部分4:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {# a标签默认就是get请求 #}
    {# GET http://127.0.0.1:8000/add_host.html   #}
    {# 这样我们发送数据的时候就会带着参数去发送相应的数据 #}
    <a href="/add_host.html?{{ url_params }}">添加</a>
    <ul>
        {% for item in hosts %}
            <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>
</html>

效果展示:
这里写图片描述

简单版本

切记:Form表单出不要写action,这样才会向页面的当前链接进行提交.
通过url_params = request.GET.get(‘_canshu’)可以获取get中的参数值


代码示例:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^host_list.html$', views.host_list),
    url(r'^add_host.html$', views.add_host),
]
from django.shortcuts import render,HttpResponse,redirect
from django.http.request  import  QueryDict


def host_list(request):
    obj = QueryDict(mutable=True)
    obj['_canshu'] = request.GET.urlencode()
    url_params = obj.urlencode()
    print(url_params)
    """
    _canshu=name%3Dzhangming%26page%3D10
    """
    hosts = ['host1','host2','host3']
    return render(request,'host_list.html',{'hosts':hosts,'url_params':url_params})

def add_host(request):
    if request.method == "GET":
        return render(request,'add_host.html')
    else:
        url_params = request.GET.get('_canshu')
        print(url_params)
        url = '/host_list.html?'+url_params
        return redirect(url)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post">
        {% csrf_token %}
        <input type="text" name="hostname">
        <input type="submit" value="提交">
    </form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="/add_host.html?{{ url_params }}">添加主机</a>
    <ul>
        {% for host in hosts %}
            <li>host</li>
        {% endfor %}
    </ul>
</body>
</html>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只懒得睁眼的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值