Django - urls.py 和 views.py相关内容

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次

    ?: 相当于{01}

    * :  相当于{0,}

    [a-z] : 匹配所有的小写字母 

    [A-Z] : 匹配所有的大写字母 

    [a-zA-Z] : 匹配所有的字母 

    [0-9] :匹配所有的数字 

    ^[a-zA-Z0-9_]+$ :所有包含一个以上的字母、数字或下划线的字符串 

    \: 将下一个字符标记为一个特殊字符

    \w  匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]

3. url 和 views 形式解析:

  1. 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' 参数 %}     # 参数可以是变量名
  2. reverse(‘shan’, args=(4,5)

    相当于:'/shan/4/5/'    
    reverse 接收 url 中的 name 作为第一个参数,
    我们在代码中就可以通过 reverse() 来获取对应的网址
    
    reverse使用方式:
        return HttpResponseRedirect(reverse('shan', args=(4,5))
    
  3. 页面跳转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方法,
    
  4. 页面跳转传递参数

    在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})
    
  5. 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/等

猜你喜欢

转载自blog.csdn.net/hello_syt_2018/article/details/80099588