一、django中的路由
1.路由是什么?
- url就是常说的网址,每个网址代表不同网页
- 在django中url也称为urlconf
- 每个url地址对应一个唯一的view视图函数
2.哪里存在路由?
- 根目录项目中的urls.py是根路由,根路由可以集合所有应用路由
- 每个应用下创建自己的urls.py,这个urls.py属于每个应用的独有路由,通过集成或者绑定到根路由中进行使用
3.路由常用方法,变量与views的绑定
- from django.urls import path,include 导入url编写模块
举例:from django.contrib import admin 导入admin功能模块
urlpatterns:整个项目的url集合,每个元素代表一条url信息
path(‘admin/‘, admin.site.urls)
- �设置admin的url
- ‘admin/‘代表uri地址,即http://127.0.0.1:8000/admin/,admin后面的斜杠为路径的分隔符
- admin.site.urls是url对应的视图函数
path(‘’, include(‘app.urls’))
- 如果url为空即代表为网站的域名
- include的是将应用中的urls包含进来
另一种写法:
from app import urls as app_urls #别名
path(‘’,include(app_urls))
拓展:网址分为两部分,domain域名与uri按照上边的地址分别为127.0.0.1::8000和admin
二、django中的视图
1.什么是views?
- django的mvt中的v部分
- 主要负责处理用户的请求和生成相应的内容
- 然后在页面或其他类型文档中显示
2.视图中的基本写法
```python from django.http import HttpResponse
def index(request): return HttpResponse(‘hello django!’)
<a name="wgNEw"></a>
### 3.视图层与路由层关联绑定
- 创建一个django项目:django-admin startproject two
- 在项目中创建一个应用:先进入项目目录:cd two 再创建app:python manage.py startapp app
- 打开项目应用:在views.py文件下创建视图内容:
```python
from django.http import HttpResponse
def index(request):
return HttpResponse('hello django!')
- 在app中新建py文件:urls.py ```python from django.conf.urls import url from .views import index urlpatterns=[ url(‘’,index) ]
- 在项目根目录下关联应用app中的路由
```python
from django.contrib import admin
from django.urls import path,include
from app import urls as app_urls
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(app_urls))
]
- 在根目录的setting.py文件下INSTALLED_APPS中添加‘app’
- 启动python manage.py runserver
- 在本地输入http://127.0.0.1:8000/可以看到正常启动
�三、路由器url的参数设置
1.url的参数
- 在url后面用?开始,键与值用等号连接,每对键值用&号区分,如:http://127.0.0.1:8000/app?name=dewei&age=30
- 在路由的参数中用分隔符分开,如:http://127.0.0.1:8000/app/dewei/30
2.django2的url变量类型
- 字符串类型:匹配任何非空字符串,但不包含斜杠
- 整型:匹配0和正整数
- slug:理解为注释
- uuid:匹配一个uuid格式的对象
3.支持url类型的方法
- from django.urls import path 2.0以后新方法
- from django.conf.urls import url 2.0以前方法,不支持参数中的类型,只能通过正则表达的方式进行基本的匹配
4.为url设置别名
path(’add’,view_function,name=’add’)
别名可以在重定向和模板定义的时候直接用别名替代,具体使用方法会在后续讲解
5.视图读取参数
- ?形式的参数-》request.GET.get(参数名)
以分隔符形式的参数:
def index(request,参数名,参数名):
print(参数名)
6.具体代码实现视图读取参数的两种方式
第一种:?形式的参数 ```python from django.http import HttpResponse
def index(request): name=request.GET.get(‘name’,’’) age=request.GET.get(‘age’,0) return HttpResponse(‘hello I am {0},age is {1}’.format(name,age))
结果如下:<br />![截屏2022-05-18 上午12.45.48.png](https://cdn.nlark.com/yuque/0/2022/png/178307/1652805976439-8c0f3bda-5940-4445-9a8e-de538b1bf289.png#clientId=u2ab5cce4-e369-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=160&id=uf6b27b65&margin=%5Bobject%20Object%5D&name=%E6%88%AA%E5%B1%8F2022-05-18%20%E4%B8%8A%E5%8D%8812.45.48.png&originHeight=396&originWidth=1012&originalType=binary&ratio=1&rotation=0&showTitle=false&size=38578&status=done&style=none&taskId=u98dba56b-9cab-4bc7-9b86-c30cf1e9e2a&title=&width=408)
- 第二种:分隔符形式
```python
from django.http import HttpResponse
def index(request,name,age):
return HttpResponse('hello I am {0},age is {1}'.format(name,age))
from django.urls import path
from .views import index
urlpatterns=[
path('<str:name>/<int:age>',index)
]
四、视图的具体介绍
视图可分为三部分:
- 用户的请求 request
- 对用户请求的逻辑处理 handler
- 将处理后的数据返回给用户 response
1.用户的请求对象request
- 浏览器向服务器发送的请求对象,包含用户信息、请求内容和请求方法
- dir(request)查看request对象的所有方法
常用的request对象的方法
request.GET #获取url上?形式的参数
request.POST #获取post提交的数据
request.path #请求的路径
request.method #请求的方法
request.COOKIES #请求过来的cookies
request.user #请求的用户对象:通过它判断用户是否登录,并获取用户信息
request.session #一个既可读又可写的类似于字典的对象,表示当前的会话
request.META #一个标准的字典,包含所有的HTTP首部,具体头部信息取决于客户端和服务器
常用的返回对象
HttpResponse 可以直接返回一些字符串内容
render 将数据在模板中渲染并显示
JsonResponse 返回一个JSON类型通常用于与前端进行Ajax交互
from django.http import HttpResponse
from django.shortcuts import render
from django.http import JsonResponse
视图面向对象的写法
from django.views.generic import View
Class Test(View):
def get(self,request):
return xxx
from django.views.generic import View
from django.http import HttpResponse
class Index(View):
def get(self,request,name,age):
return HttpResponse('hello I am {0},age is {1}'.format(name,age))
from django.urls import path
from .views import Index
urlpatterns=[
path('<str:name>/<int:age>',Index.as_view)
]
【拓展知识】restful规范以及http介绍
restful简介
- Url定位资源-通过一个url地址可以让我们知道这个地址所要提供的功能是什么,例如添加一个用户:127.0.0.1/add/user
- url一切皆资源
restful常用方法
- get获取资源时使用 比如我们查看一个网页
- post提交资源时使用 比如我们注册一个用户的时候
- put修改资源的时候 比如我们修改自己的用户信息的时候
- delete 删除资源时使用 比如我们注销自己的账号的时候
http协议
无状态性:服务器不会记录每次请求连接
http常用状态码
- 200 成功
- 400 请求错误
- 403 禁止访问
- 404 没有获取到url地址
- 405 方法禁用,比如指定用get方法,但你用post方法
- 500 服务器异常