3、Django 视图
视图的定义:
- 视图接受web的请求,并且返回给web一个响应。
- 视图就是一个python函数,被定义在views.py中。
- 响应可以是一张网页的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('这是转向来的页面')