在web站点上许多操作都需要与后端交互,此时需要发起一个 Http请求,并等待后端服务返回一个Http响应。在Django中涉及两个相关概念:URL和视图。每一个请求对应一个URL,URL映射到具体的视图函数(类),传递HttpRequest,视图处理之后返回HttpResponse。
定义视图
每个视图都回接收一个请求,对请求进行自定义处理,最后返回一个响应,这就是视图完整定义需要的操作。
对于规范的项目,视图置于应用或项目的views.py文件中。
在新创建的应用目录下进入view.py文件,在文件中定义第一个视图函数:
from django.http import HttpResponse
def hello_django_bbs(request):
html="<h1>hello Django BBS</h1>"
return HttpResponse(html)
上述四句话指的是:
- 引入HttpResponse,作为视图的返回类型
- 视图函数声明,函数名为hello_django_bbs,视图的第一个参数是HttpRequest类型的对象,通常定义为request
- 函数内部定义业务处理逻辑,此处简单定义了视图的响应内容
- 视图最后返回一个HttpResponse对象,标识一次web请求的结束
URL到视图的映射
URL和视图是一一映射的关系。每一个请求对应一个URL,URL对应视图函数(类)。
在视图写完之后,我们可以将当前视图与一个URL进行映射
from django.urls import path
from **(应用名) import path
urlpatterns ={
path('**应用名/hello/',views.hello_django_bbs)
}
此时,在浏览器中输入http://127.0.0.1:8000/**/hello即可将定义的html界面打印出来
Django三种定义URL配置的方法
- 针对基于函数的视图
将视图定义文件引入(import),利用path定义视图与URL的对应关系,如上hello代码,当前path函数传递了两个参数,第一个参数定义了URL的匹配规则,第二个参数定义了映射的视图函数,这两个参数是必填项
- 针对基于类的视图
首先将视图类对象引入,然后用类似的方法配置URL与视图的对应关系,实例如下:
from other_app.views import home
path(' ',Home.as_view(),name='home')
- 第三种,针对项目中存在多APP的场景
利用include实现App与项目的解耦。include将App的URL配置文件导入,之后实现根据不同的App来分发请求,实现每个App自己管理自己的视图与URL映射,配置管理App模式
from django.urls import include,path
path('blog/',include('blog.urls'))
例如在项目的post应用下创建urls.py文件(PS这是post应用的URL配置文件,假设项目名my_bbs,则配置文件路径为my_bbs/post/urls.py,在项目的urls.py中也要引入),具体内容如下:
from django.urls import path
from post import views
urlpatterns={
path('hello/',views.hello_django_bbs)
}
同时修改项目的urls.py文件内容
urlpatterns={
path('admin/',admin.site.urls),
path('post/',inlcude(post.urls'))
/*以post开头的请求交给post应用的URL配置去处理*/
}