python manage.py startapp app1
#打开项目的的主urls.py文件,导入include方法
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
#增加分布式路由,将用户访问127.0.0.1:8000/app1的请求都转发到app1应用的urls文件的路由中。
path('app1/',include('app1.urls'))
]
在应用app1下新建文件urls.py文件,增加以下内容
from django.urls import path
#将视图文件中的视图函数都导入进来
from .views import *
urlpatterns = [
#访问根路径的配置.index为函数的名称
path('', index),
path('test/',test)
]
打开views.py文件,新建视图函数
from django.http.response import HttpResponse
#这里要注意一下,所有的视图函数第一参数必须是request参数
def index(request):
return HttpResponse('app1 page
')
def test(request):
return HttpResponse('test page
')
http://127.0.0.1:8000/app1/
http://127.0.0.1:8000/app1/test
#导入JsonResponse
from django.http.response import HttpResponse,JsonResponse
from django.views import View
data = {
'name': 'zhangsan',
'age': 20
}
#返回json数据
def index(request):
return JsonResponse(data)
视图装饰器的主要作用是,限制用户只能使用某种方法来访问此视图函数。当限制了用户使用特定的方法访问视图函数时,返回结果为405而不再是500
#导入
from django.views.decorators.http import require_http_methods,require_GET,require_POST
#@require_GET 或者@require_POST 或者 @require_http_methods(['GET','POST'])
def test(request):
return HttpResponse('test page
')
django还给我们提供了另外一种和视图函数一样功能的方法,那就是"视图类"。
打开app1应用的下的views.py
from django.http.response import HttpResponse,JsonResponse
from django.views import View
#自定义的视图类必须要继承VIew这个基类。类中的方法名字就是用户用什么method方法请求的,就会对应到什么方法上去。这样就不会向视图函数那样,需要单独在用视图装饰器在装饰了
class test(View):
def get(self,request):
return HttpResponse('这是get方法的返回值')
def post(self,request):
return HttpResponse('这是post方法的返回值')
def put(self,request):
return HttpResponse('这是put方法的返回值')
主路由配置不会变化,子路由编写的时候会发生变化。在编写好视图类之后
#导入基类,自己编写的视图类,必须要继承这个基类
from django.views import View
from .views import *
urlpatterns = [
# as_view()只能是类和子类调用,实例不能调用
#这里调用的时候是:"自己编写的视图类名字 + as_view()" as_view()是固定写法。
#as_view()是类中的方法,源码中这个方法返回的是view函数的地址。所以这时候和视图函数的格式是一样的。所以这里这么写就不奇怪了。
path('test/',test.as_view())
]
注意:
as_view中的view函数做什么了事情?
1.每一次用户请求调用as_view函数的时候,as_view把view视图函数返回
2.view函数会根据请求生成对应的 “实例” ,这样的就用不同的 “实例” 区分出来的了不同的请求,也就是说区分出来了每一个独立的请求。也是是和普通视图函数最大的区别
3.最后在通过dispatch函数在派发到对应的 方法 上去
!!!注意:在测试的时候需要把下行内容在settings.py中注释掉
'django.middleware.csrf.CsrfViewMiddleware'
分别使用get,post,put方法访问
127.0.0.1:8000/app1/test/