1. request请求:
访问网址时相当于:
request.GET
在页面中提交内容时,相当于:
request.POST
不过得到的内容类似一个字典,如果想要获取想要的内容:
request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0
采用 /add/?a=4&b=5 这样GET方法进行:
def add(request):
a = request.GET['a']
b = request.GET['b']
c = int(a)+int(b)
return HttpResponse(str(c))
页面上输出结果 9
HttpResponse相当于print, 只不过会把结果打印在页面上
2. urls.py中常用的正则表达式
r : 定义引号中的内容不转义,为原生字符串
\d : 匹配任意数字
+ : 相当于{1,}, 匹配前面内容1次或者多次
() : \d+ 会产生多种情况, () 的作用是把每一种情况进行分组
^ : 匹配内容的开始
$ : 匹配内容的结束
{0,10}:把前面的内容匹配0-10次
{2}: 把前面的内容匹配2次
?: 相当于{0,1}
* : 相当于{0,}
[a-z] : 匹配所有的小写字母
[A-Z] : 匹配所有的大写字母
[a-zA-Z] : 匹配所有的字母
[0-9] :匹配所有的数字
^[a-zA-Z0-9_]+$ :所有包含一个以上的字母、数字或下划线的字符串
\: 将下一个字符标记为一个特殊字符
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]
3. url 和 views 形式解析:
url(r’^add/(\d+)/(\d+)/$’, views.add, name=’shan’)
name 相当于给网址取了个名字,通过该名字可以找到网址 此处网址相当于/add/数字/数字,只要符合该形式, 就去执行views.py中定义的add方法
例如: 给templates中的html中的a标签加个链接地址,访问上面定义的url地址
方法1:<a href="/add/4/5/">标签内容</a>
方法2:<a href="{% url 'shan' 4 5 %}">标签内容</a> 不带参数的: {% url 'name' %} 带参数的: {% url 'name' 参数 %} # 参数可以是变量名
reverse(‘shan’, args=(4,5)
相当于:'/shan/4/5/' reverse 接收 url 中的 name 作为第一个参数, 我们在代码中就可以通过 reverse() 来获取对应的网址 reverse使用方式: return HttpResponseRedirect(reverse('shan', args=(4,5))
页面跳转url:
views.py中一个跳转函数:
from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse # a,b 给函数传入的固定参数 def good(request, a, b): return HttpResponseRedirect( reverse('add2', args=(a, b)) )
urls.py中:
url(r'^add/(\d+)/(\d+)/$',good), url(r'^new_add/(\d+)/(\d+)/$', views.add2, name='add2') 当使用/add/a/b/ 访问时, 会访问views.py中的good方法,
页面跳转传递参数
在urls.py中定义name和传递参数的
from django.conf.urls import url import views urlpatterns = [ url(r'^$', views.index,name='book_index'), url(r'^book/(?P<bookid>\d+)$', views.index1,name='book_list')]
在前端页面中定义跳转,并传递参数
<a href="{% url 'book_list' bookid='10' %}">跳转</a>
在前端页面中定义跳转,并传递参数
def index1(request,bookid='0'): print '传递的参数',bookid books = ['三国演义', '西游记', '红楼梦', '水浒传'] return render(request, 'book1.html', {'books': books})
url中的正则表达式网址解析
r'^(?P<question_id>[0-9]+)/$' # 匹配 2/,30/,50/ 等
[0-9] 匹配0~9之间的数字。如2,3,0 + 匹配前面字符一次或多次 [0-9]+ 能匹配到 3,50,139 一组数字 () 把括号中匹配出现的情况进行分组 ?P<shan> 将后面匹配到的 3,50,139 这些数字命名为shan, ^ 和$ 表示开头和结尾。
下面的url() 就是添加了2/,30/,50/ 这些endpoint到对应的视图函数的映射关系。
url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), url(r'^(?P<question_id>[0-9]+)/results/$' ) # 匹配到2/results/,30/results/,50/results/ 等
下面的代码一样添加这些endpoint到对应视图函数的映射关系。
url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'), r'^details/(?P<id>\w{0,50})/$' # \w 匹配单词字符,A-Z,a-z,0-9 # {0,50},匹配前一字符0~50次。 # 整个正则表达式能匹配details/23/,details/y02/等