3、Django 视图

 视图的定义:

  1. 视图接受web的请求,并且返回给web一个响应。
  2. 视图就是一个python函数,被定义在views.py中。
  3. 响应可以是一张网页的HTML内容,一个重定向,一个404错误等等

处理过程:

在浏览器输入url(www.test.com/1/100)  ==> django接受到请求,获取地址去掉域名和端口 ==> 匹配路径/1/100 ==> 匹配到后调用veiws函数对应的方法  ==> 函数获取到url穿过来的值并返回一个响应。

一、URLconf

1、在settings.py文件中通过ROOT_URLCONF指定根级url的配置

ROOT_URLCONF = 'test1.urls'

 

  • urlpatterns是一个url()实例的列表
  • 一个url()对象包括:
    • 正则表达式
    • 视图函数
    • 名称name
  • 编写URLconf的注意:
    • 若要从url中捕获一个值,需要在它周围设置一对圆括号
    • 不需要添加一个前导的反斜杠,如应该写作'test/',而不应该写作'/test/'
    • 每个正则表达式前面的r表示字符串不转义

 

 

二、视图函数

传参:

# 传递多个参数
url(r'^(\d+)/(\d+)/(\d+)/$',views.detail),

# 传递关键字参数。
url(r'^(?P<p1>\d+)/(?P<p2>\d+)/(?P<p3>\d+)/$',views.detail),

html中传参:
<a herf="/booktest/getTest2/?a=1&b=2&c=3">test2</a>

views视图中获取参数:

def details(request,a1,b1,c1):
    request.GET['a']
    request.GET['b']
    request.GET['c']
    context = {"a":a1,"b":b1,"c":c1}
    return render(request,'xxx/xxx.html',context)

GET  一键多值:

request.GET.getlist('a') 

 

实例:

### postTest1.html 中定义:
<form method="post" action="/bookttest/postTest2/">
{% csrf_token %} 用户名:<input type="text" name="uname"> <br> 密码: <input type="password" name="upwd"> <br> 性别: <input type="radio" name="ugender" value="男" checked="checked"> 男
   <input type="radio" name="ugender" value="女" checked="checked"> 女 爱好: <input type="checkbox" name="uhobby" value="" >胸口碎大石 <input type="checkbox" name="uhobby" value="" >胸口碎大石 <input type="checkbox" name="uhobby" value="" >胸口碎大石 <br> <input type="submit" value="提交"> </form> ### views 接受值 def postTest2(request): uname = request.POST['uname'] upwd = request.POST['upwd'] ugender = request.POST.get('ugender') uname = request.POST.getlist('uhobby') contest={'uname':uname,'upwd':upwd}

 如403:

 

 

 

 

三、Request对象

四、Respense对象

 

cookie 练习

def cookieTest(request):
	response = HttpResponse()
	cookie = request.COOKIES
	if cookie.has_key('t1'):
		response.write(cookie['t1'])
	# response.set_cookie('t1','abc')
	return response

url 跳转 

def redTest1(request):
	# return HttpResponseRedirect('/booktest/redTest2/')
	return redirect('/booktest/redTest2/')

def redTest2(request):
	return HttpResponse('这是转向来的页面')

 

 

 

五、状态保持

posted @ 2020-03-16 22:30  Mr-Lee-long  阅读(146)  评论(0编辑  收藏  举报