关闭

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

标签: djangourl
765人阅读 评论(0) 收藏 举报
分类:

博客核心内容:


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
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【django】搭建博客教程(4)——超级简单实现滚动回到页面顶端按钮

一.jQuery代码:首先使用window对象的scroll回调函数来控制当页面向下滚动超过150px的时候,显示back to top按钮,否则隐藏。其次,当点击“回到顶端”的时候,调用animate方法来滚动页面到顶端。以下代码可以以script的形式插入到html中。 $(documen...
  • jiange_zh
  • jiange_zh
  • 2015-11-30 20:12
  • 648

用django实现一个简单的页面

学习了一段时间的django,今天总算对它有点感觉了。用自己的话介绍django,应该就是一种可以通过执行一系列的方法,将请求的内容返回给客户的web框架。 1.首先,创建项目,创建app,连接服务器。这些操作可以在命令行下进行,也可以在py-charm中进行,看个人爱好。以下展示命令行的操作。 ...
  • miaomiao0313
  • miaomiao0313
  • 2017-03-22 20:59
  • 912

关于django的render函数的参数问题

hello.html 文件代码如下: HelloWorld/templates/hello.html 文件代码: h1>{{ hello }}h1> HelloWorld/HelloWorld/view.py 文件代码: # -*- cod...
  • u013176681
  • u013176681
  • 2017-06-28 14:46
  • 2592

Django+Ajax+jQuery实现网页动态更新

views.py中的修改 增加相应的请求处理函数: def getdevjson(request):     print 'get here'     if ('key' in request.GET):  ...
  • u010736419
  • u010736419
  • 2017-02-08 16:47
  • 1994

用Django制作第一个网页

1.django-admin.py startproject plant 创建名为plant的项目 tree一下,可以看到文件夹下都有哪些文件 2.如下在第二级plant文件夹下新建一个名为pig.py的文件 from django.http import HttpResponse def H...
  • hzx3739
  • hzx3739
  • 2015-10-27 22:54
  • 27857

Django搭建简单网页的学习笔记 之三(View)

一、编写前台界面views:  编写前台界面需要显示的内容,打开polls/views.py,编写如下代码: polls/views.py from django.http importHttpResponse def index(request): return Htt...
  • JackieLeeWelas
  • JackieLeeWelas
  • 2015-09-22 11:46
  • 935

Django搭建简单网页的学习笔记之四(Form)

Django搭建简单网页的学习笔记之四 (使用简单表单处理数据以及使用generic views精简代码) 一、使用表单处理数据 1、为了实现投票功能,当点击某一选项时,能提交数据到vote里去处理并返回结果,需要使用表单提交数据,在之前的detail.html里写上如下代码: polls/temp...
  • JackieLeeWelas
  • JackieLeeWelas
  • 2015-10-11 15:58
  • 922

django(1)——使用Django搭建一个无数据交互的静态网页

Django(1)——使用Django搭建一个无数据交互的静态网页一、创建django文件为了不同网站之间的修改变动的影响,所以首先我们要创建一个虚拟环境; 打开IDE,我们使用Termional创建一个app,所以在里面输入下面一行代码:python manage.py startapp (...
  • depers15
  • depers15
  • 2016-08-17 20:29
  • 940

用django实现url跳转的几种方法总结

用django实现url跳转的几种方法总结     用django开发web应用, 经常会遇到从一个旧的url转向一个新的url。这种隐射也许有规则,也许没有。但都是为了实现业务的需要。总体说来,有如下几种方法实现 django的 redirect。 1. 在url 中配...
  • lvze0321
  • lvze0321
  • 2016-11-23 10:52
  • 10328

django js实现部分页面刷新

例子中,我用的是显示机器上的进程信息的表格,获取不同的机器的进程信息时,更新这个展示信息的表格,如下: 当我在输入框中输入ip时,我希望只是更新这个表格,页面其他部分不变,实现方式如下: 1、在原页面中设置这个表格的id为pstable ...
  • u011085172
  • u011085172
  • 2017-04-28 15:57
  • 1887
    个人资料
    • 访问:619417次
    • 积分:8992
    • 等级:
    • 排名:第2439名
    • 原创:332篇
    • 转载:87篇
    • 译文:0篇
    • 评论:111条
    最新评论