Django 数据传递

时间:2023-03-09 02:24:54
Django 数据传递

在前面的访问数据库中,我们是这样来插入数据的:

[root@localhost web]$ cat web/urls.py

urlpatterns = patterns('',
....
url(r'^db/$', 'blog.views.db'), # 先定义访问的URL,然后再根据URL定义视图文件
)
[root@localhost web]$ cat blog/views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader, Context
from blog.models import Host def db(request):
h = Host()
h.hostname = 'node04' # 这里直接把数据写死了
h.ip = '192.168.1.4'
h.save()
return HttpResponse("OK")

Django 数据传递

我们可以通过 POST 或 GET 方法来传递数据:

GET 是直接以网址形式打开,网址中包含了所有的参数,浏览器会把 http header 和 data 一并发送出去,服务器响应200(返回数据)
POST 是浏览器先发送 http header,服务器响应100 continue,浏览器再发送 data,服务器响应200 ok(返回数据),具体用什么方法是由服务器来决定的

[root@localhost web]$ cat blog/views.py
....
from blog.models import Host # 加载数据模型 def db(request):
if request.POST:
hostname = request.POST.get('hostname') # 从POST数据中获取主机名
ip = request.POST.get('ip') # 从POST数据中获取IP地址
host = Host() # 实例化数据模型
host.hostname = hostname # 插入主机名数据
host.ip = ip # 插入IP地址数据
host.save() # 保存数据到数据库
return HttpResponse('OK') # 最后返回一个结果给页面
elif request.GET:
hostname = request.GET.get('hostname')
ip = request.GET.get('ip')
host = Host()
host.hostname = hostname
host.ip = ip
host.save()
return HttpResponse('OK')
else:
return HttpResponse('No Data!')
[root@localhost web]$ cat web/settings.py
...... MIDDLEWARE_CLASSES = (
......
#'django.middleware.csrf.CsrfViewMiddleware', # 注释掉该项,如果不注释掉,那么发送POST请求需要字符串验证
)

通过 POST 方法传递数据(第一种方式):

[root@localhost web]$ curl -d hostname='node05' -d ip='192.168.1.5' http://192.168.216.128:8000/db/
OK

通过 POST 方法传递数据(第二种方式):

#!/usr/bin/env python
#-*- coding:utf-8 -*- import urllib, urllib2 data = {
'hostname': 'node05',
'ip': '192.168.1.5',
} url = 'http://192.168.216.128:8000/db/'
response = urllib2.urlopen(url, urllib.urlencode(data))
print response.read()

通过 GET 方法传递数据(第一种方式):

Django 数据传递

通过 GET 方法传递数据(第二种方式):

#!/usr/bin/env python
#-*- coding:utf-8 -*- import urllib, urllib2 data = {
'hostname': 'node06',
'ip': '192.168.1.6',
} url = 'http://192.168.216.128:8000/db/' + urllib.urlencode(data)
response = urllib2.urlopen(url)
print response.read()