05 Django 视图与网址进阶

一 、在网页上做加减法

1. 采用 /add/?a=4&b=5 这样GET方法进行

我们修改Django_App/views.py文件

from django.shortcuts import render
from django.http import HttpResponse
 
def add(request):
    a = request.GET['a']
    b = request.GET['b']
    c = int(a)+int(b)
    return HttpResponse(str(c))

注:request.GET 类似于一个字典,更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0

接着修改Django_App/urls.py

from django.conf.urls import url
from django.contrib import admin
from Django_App import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/',views.index),
    url(r'^$',views.index),
    url(r'^login',views.login),
    url(r'^add/$',views.add,name='add'),
]

打开网址:http://127.0.0.1:8000/add/ 就可以看到

MultiValueDictKeyError at /add/

这是因为我们并没有传值进去,我们在后面加上 ?a=4&b=5,即访问 http://127.0.0.1:8000/add/?a=4&b=5

就可以看到网页上显示一个 9,试着改变一下a和b对应的值试试看?

2. 采用 /add/3/4/ 这样的网址的方式

首先修改Django_App/views.py文件 

def add2(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))

接着修改Django_App/urls.py

url(r'^add/(d+)/(d+)/$', views.add2, name='add2'),

我们可以看到网址中多了 (d+), 正则表达式中 d 代表一个数字,+ 代表一个或多个前面的字符,写在一起 d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组(更多知识请参见 Python 正则表达式),每一个子组将作为一个参数,被 views.py 中的对应视图函数接收

二、定义视图函数

app下views.py

def func(request):
                # request.method   GET / POST
                
                # http://127.0.0.1:8009/home?nid=123&name=alex
                # request.GET.get('',None)   # 获取请求发来的而数据
                
                # request.POST.get('',None)
                
                # return HttpResponse("字符串")
                # return render(request, "HTML模板的路径")
                # return redirect('/只能填URL')
原文地址:https://www.cnblogs.com/jasonli-01/p/6675149.html