Django14——get传参

1、什么是URL的参数

URL:统一资源定位符,他的形式如下:

schema://host[:port#]/path/.../[?query-string][#anchor]
  • schema:指定使用的协议(如:http,https,ftp)
  • host:Http服务器的IP地址或者域名
  • port:端口号,http默认是80端口
  • path:访问资源的路径
  • query-string:发送给http服务器的数据
  • anchor:锚点

例如:http://127.0.0.1:8000/hello/

其中URL中可以通过?将请求的资源和请求的参数分离开。
例如

http://127.0.0.1:8000/add_item/?title=hello

其中title=hello就是用户请求/add_item/资源的参数,URL的参数的格式:

参数名=参数值

参数值可以为空,若多个参数则以&符号做多参数的连接。

2、HttpRequest对象

  • 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象
  • 视图函数的第一个参数是HttpRequest对象
  • django.http模块中定义了HttpRequest对象的API

属性

下面除非特别说明,属性都是只读的

  • path:一个字符串,表示请求的页面的完整路径,不包含域名
  • method:一个字符串,表示请求使用的HTTP方法,常用值包括:‘GET’、‘POST’
  • encoding:一个字符串,表示提交的数据的编码方式 如果为None则表示使用浏览器的默认设置,一般为utf-8。这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值
  • GET:一个类似于字典的对象,包含get请求方式的所有参数
  • POST:一个类似于字典的对象,包含post请求方式的所有参数
  • FILES:一个类似于字典的对象,包含所有的上传文件
  • COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串
  • session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用。

QueryDict对象

定义在django.http.QueryDict
request对象的属性GETPOST都是QueryDict类型的对象
python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
方法get():根据键获取值

  • 只能获取键的一个值
  • 如果一个键同时拥有多个值,获取最后一个值
dict.get('键',default) 或简写为 dict['键']

方法getlist():根据键获取值

  • 将键的值以列表返回,可以获取一个键的多个值
dict.getlist('键',default)

GET属性

  • QueryDict类型的对象
  • 包含get请求方式的所有参数
  • url请求地址中的参数对应,位于?后面
  • 参数的格式是键值对,如key1=value1 多个参数之间,使用&连接,如key1=value1&key2=value2
  • 键是开发人员定下来的,值是可变的

POST属性

  • QueryDict类型的对象
  • 包含post请求方式的所有参数
  • form表单中的控件对应
  • 问:表单中哪些控件会被提交?
  • 答:控件要有name属性,则name属性的值为键,value属性的值为值,构成键值对提交。
  • 对于checkbox控件,name属性一样为一组,当控件被选中后会被提交,存在一键多值的情况
  • 键是开发人员定下来的,值是可变的。

表单传参方式

get传参是在url后面显示,为显示传参。

https://www.example.com/myapp/?page=3&age=10

post传参是隐形传参,通过表单提交。

get传参

(1)新建页面
templates下新建study文件夹,在study下新建getTest1.html页面。
在这里插入图片描述
在这里插入图片描述
(2)配置路由

path('getTest1/',views.getTest1),

(3)定义视图

展示链接的页面
def getTest1(request):
    return render(request,"study/getTest1.html")

(4)效果如下:
在这里插入图片描述
(5)修改页面如下:

一键一值:<a href="/study/getTest2/?a=1&b=2&c=3">test2</a>
一键多值:<a href="/study/getTest3/?a=1&a=2&a=3"> test3</a>

在这里插入图片描述

<a href="/study/getTest2/?a=1&b=2&c=3>test2</a>study前有/,指相对项目的根目录,即单击test2,得到的地址为:http://1270.0.1:8000/study/getTest2/?a=1&b=2&c=3
在这里插入图片描述

单击test3得到的地址为:
在这里插入图片描述

如果把study前的/去掉,即<a href="study/getTest2/?a=1&b=2&c=3>test2</a> ,表示相对当前页面的地址。
在这里插入图片描述

当前页面的地址为:http://127.0.0.1:8000/study/getTest1/ ,拼上相对地址:study/getTest2/?a=1&b=2&c=3,单击test2得到的地址为:http://127.0.0.1:8000/study/getTest1/study/getTest2/?a=1&b=2&c=3
在这里插入图片描述
单击test3得到的地址为:
在这里插入图片描述

(6)访问getTest1,并单击试试看。
在这里插入图片描述
(7)配置路由

path('getTest2/', views.getTest2),
path('getTest3/', views.getTest3),

(8)定义视图
在这里插入图片描述
在这里插入图片描述
(9)定义页面
在这里插入图片描述
getTest2.html

<body>
a: {{ aa }}
<hr />
b: {{ bb }}
<hr />
c: {{ cc }}
</body>

getTest3.html

<body>
a:{{ aa }}
</body>

(10)查看效果
在这里插入图片描述
单击test2
在这里插入图片描述
单击test3
在这里插入图片描述

Django是一个流行的高级Python Web框架,它提供了很多内置的功能,包括一个强大的ORM(对象关系映射)系统和用于快速搭建应用的能力。如果要在Django中创建一个通知(Notification)应用程序,通常会涉及以下几个步骤: 1. **模型设计**:首先,你需要定义一个`Notification`模型,包含基本的信息如标题、内容、发送者和接收者等。可能还会有一个状态字段(如已读/未读)。 ```python from django.db import models class Notification(models.Model): title = models.CharField(max_length=200) content = models.TextField() sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_notifications') recipient = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_notifications') is_read = models.BooleanField(default=False) ``` 2. **视图处理**:对于用户接收和管理通知,你可以创建视图函数来显示通知列表、标记为已读、删除通知等。例如,展示通知可能涉及到从数据库获取用户的通知并分页展示。 3. **模板渲染**:创建HTML模板,比如`notifications.html`,用于显示通知详情或通知列表。 4. **信号和任务**:如果需要异步处理(比如通过邮件、推送通知等),可以使用Django的信号系统结合Celery或其他任务队列工具。 5. **URL配置**:在urls.py文件中设置路由,将用户访问通知的URL映射到相应的视图函数。 6. **权限管理**:为了保护用户的隐私,可能需要对哪些用户可以看到特定通知进行权限控制。 完成以上步骤后,用户就可以在Django网站上看到和管理他们的通知了。如果你有更具体的问题,比如如何实现某种功能或者遇到技术难题,欢迎提问:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值