一、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功能模块
截屏2022-05-17 上午7.45.27.png
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!’)

  1. <a name="wgNEw"></a>
  2. ### 3.视图层与路由层关联绑定
  3. - 创建一个django项目:django-admin startproject two
  4. - 在项目中创建一个应用:先进入项目目录:cd two 再创建app:python manage.py startapp app
  5. - 打开项目应用:在views.py文件下创建视图内容:
  6. ```python
  7. from django.http import HttpResponse
  8. def index(request):
  9. return HttpResponse('hello django!')
  • 在app中新建py文件:urls.py ```python from django.conf.urls import url from .views import index urlpatterns=[ url(‘’,index) ]
  1. - 在项目根目录下关联应用app中的路由
  2. ```python
  3. from django.contrib import admin
  4. from django.urls import path,include
  5. from app import urls as app_urls
  6. urlpatterns = [
  7. path('admin/', admin.site.urls),
  8. path('',include(app_urls))
  9. ]
  • 在根目录的setting.py文件下INSTALLED_APPS中添加‘app’
  • 启动python manage.py runserver
  • 在本地输入http://127.0.0.1:8000/可以看到正常启动

截屏2022-05-17 上午8.12.44.png

�三、路由器url的参数设置

1.url的参数

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(参数名)
  • 以分隔符形式的参数:

    1. def indexrequest,参数名,参数名):
    2. 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))

  1. 结果如下:<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)
  2. - 第二种:分隔符形式
  3. ```python
  4. from django.http import HttpResponse
  5. def index(request,name,age):
  6. return HttpResponse('hello I am {0},age is {1}'.format(name,age))
  1. from django.urls import path
  2. from .views import index
  3. urlpatterns=[
  4. path('<str:name>/<int:age>',index)
  5. ]

结果如下:
截屏2022-05-18 上午12.51.29.png

四、视图的具体介绍

视图可分为三部分:

  • 用户的请求 request
  • 对用户请求的逻辑处理 handler
  • 将处理后的数据返回给用户 response

1.用户的请求对象request

  • 浏览器向服务器发送的请求对象,包含用户信息、请求内容和请求方法
  • dir(request)查看request对象的所有方法

常用的request对象的方法

  1. request.GET #获取url上?形式的参数
  2. request.POST #获取post提交的数据
  3. request.path #请求的路径
  4. request.method #请求的方法
  5. request.COOKIES #请求过来的cookies
  6. request.user #请求的用户对象:通过它判断用户是否登录,并获取用户信息
  7. request.session #一个既可读又可写的类似于字典的对象,表示当前的会话
  8. request.META #一个标准的字典,包含所有的HTTP首部,具体头部信息取决于客户端和服务器

常用的返回对象

  1. HttpResponse 可以直接返回一些字符串内容
  2. render 将数据在模板中渲染并显示
  3. JsonResponse 返回一个JSON类型通常用于与前端进行Ajax交互
  4. from django.http import HttpResponse
  5. from django.shortcuts import render
  6. from django.http import JsonResponse

视图面向对象的写法

  1. from django.views.generic import View
  2. Class Test(View):
  3. def get(self,request):
  4. return xxx
  1. from django.views.generic import View
  2. from django.http import HttpResponse
  3. class Index(View):
  4. def get(self,request,name,age):
  5. return HttpResponse('hello I am {0},age is {1}'.format(name,age))
  1. from django.urls import path
  2. from .views import Index
  3. urlpatterns=[
  4. path('<str:name>/<int:age>',Index.as_view)
  5. ]

【拓展知识】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 服务器异常