Python Django开发 经验技巧总结(二)
时间:2022-07-22
本文章向大家介绍Python Django开发 经验技巧总结(二),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
文章目录
- 1.模板中变量的运算
- 2.getlist获取多个值
- 3.查询集去重distinct()方式
- 4.模板中的for循环计数实现自增
- 5.查询数据库时,按照desc倒序返回数据
- 6.静态文件添加背景图片
- 7.启动服务让其他电脑可访问
1.模板中变量的运算
(1)加法
{{value|add:value2}}
#返回的结果是value+value2的值,假设你value为40,value2为60 ,则该表达式
#返回结果为100
(2)减法
{{value|add -value2}}
#与加法的性质一样,只不过是把第二个参数变成负数进行运算,返回的结果是value-value2
#假如value=4,value2=8,则返回的结果是-4
(3)乘法
{% widthratio value1 value2 value3%}
#上面的代码表示 value1/value2*value3,widthratio需要三个参数,进行乘法 只需将第二个参数等于1即可
#例: value1=10 value2=1 value3=2 返回的结果为10/1*2=20
(4)除法
{% widthratio value1 value2 value3%}
#返回的结果是 (value1/value2)*value3 只需将value3等于1就能进行除法运算
#例: value1=100 value2=20 value3=1 返回的结果为 (100/20)*1=5
2.getlist获取多个值
urls.py加一条路由视图:
url(r'register',views.register),
主站views.py上加register函数:
def register(request):
if request.method == "GET":
return render(request,'register.html')
elif request.method == "POST":
v = request.POST.get('gender')
f = request.POST.getlist('favor', '')
c = request.POST.get('city')
c2 = request.POST.getlist('city2')
print(v, f, c, c2)
return render(request, 'register.html')
register.html的配置:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<link rel="stylesheet" href="/static/commons.css" />
<body>
<form action="/zhuce" method="post">
<p>
<input type="text" name="user" placeholder="用户名" />
</p>
<p>
<input type="password" name="pwd" placeholder="密码" />
</p>
<p>
男:<input type="radio" name="gender" value="1" />
女:<input type="radio" name="gender" value="2"/>
人妖: <input type="radio" name="gender" value="3" />
</p>
<p>
篮球:<input type="checkbox" name="favor" value="1">
足球:<input type="checkbox" name="favor" value="2">
排球:<input type="checkbox" name="favor" value="3">
</p>
<p>
<select name="city">
<option value="sh">上海</option>
<option value="bj">北京</option>
<option value="tj">天津</option>
</select>
</p>
<p>
<select name="city2" multiple>
<option value="sh">上海</option>
<option value="bj">北京</option>
<option value="tj">天津</option>
</select>
</p>
<p><input type="submit" value="提交"></p>
</form>
<script src="/static/jquery.min.js"></script>
</body>
</html>
从django后台打印的post信息可以看到多选框里面的内容是列表的形式,request.POST.getlist()
可以接收到所有共享同一个name的value。
3.查询集去重distinct()方式
# 学习该课程的用户,首先获取该课程在UserCourse对应关系,然后查询UserCourse表中的所有用户,使用distinct()去重
user_courses = UserCourse.objects.filter(course=course)
print(user_courses)
user_courses = user_courses.values('user__nick_name', 'user__username', 'user__image').distinct()
print(user_courses)
结果
<QuerySet [<UserCourse: admin 学习 Django入门基础>, <UserCourse: user 学习 Django入门基础>, <UserCourse: admin 学习 Django入门基础>]>
<QuerySet [{'user__nick_name': 'LR', 'user__username': 'admin', 'user__image': 'image/2018/08/admin头像.jpg'}, {'user__nick_name': 'user', 'user__username': 'user', 'user__image': 'image/default.png'}]>
4.模板中的for循环计数实现自增
Django框架的模板提供了{% for %}
标签来进行循环
例如对集合进行循环如下
{% for row in v1 %}
<div>{{row.name}}</div>
{% endfor %}
但是在Django中,并不直接支持形如"int i = 0;i<100;i++" 这样的循环,Django有自己的自增方法,假设v1内有2个元素: (1)从1开始正向自增 结果1,2
{% for row in v1 %}
<div>{{forloop.counter}}</div>
{% endfor %}
(2)从0开始正向自增 结果0,1
{% for row in v1 %}
<div>{{forloop.counter0}}</div>
{% endfor %}
(3)自减到1 结果2,1
{% for row in v1 %}
<div>{{forloop.revcounter}}</div>
{% endfor %}
(4),自减到0 结果1,0
{% for row in v1 %}
<div>{{forloop.revcounter0}}</div>
{% endfor %}
(5)是否是最后一个 结果False,True
{% for row in v1 %}
<div>{{forloop.last}}</div>
{% endfor %}
(6)是否是第一个 结果True,False
{% for row in v1 %}
<div>{{forloop.first}}</div>
{% endfor %}
(7)如果有多层循环,返回上层循环的全部取值的结果
{% for i in v1 %}
{% for row in v1 %}
<div>{{forloop.parentloop}}</div>
{% endfor %}
{% endfor %}
5.查询数据库时,按照desc倒序返回数据
按照“ id ”从小到大查询数据
projects = models.Project.objects.all().order_by("id")
或者
projects = models.Project.objects.order_by("id")
从大到小排序:
projects = models.Project.objects.all().order_by("-id")
或者
projects = models.Project.objects.order_by("-id")
6.静态文件添加背景图片
创建一个子目录来存放图片,在这个目录中,放入一张图片background.jpg
在样式表中添加
body{background:url({% static 'images/background.jpg'%}) no-repeat;background-size:100% 100%;background-size:cover;}
重新加载http://127.0.0.1:8000/,你就会在页面上看到载入的背景图片。
7.启动服务让其他电脑可访问
(1)修改 Django项目中的settings.py中的 ALLOWED_HOSTS 的值为 [*]
# 准许那些地址访问,* 表示任意地址
ALLOWED_HOSTS = ['*']
# ALLOWED_HOSTS = ['192.168.1.49', 'localhost', '127.0.0.1']
(2)使用命令启动服务:
python manage.py runserver 0.0.0.0:8000
其他的电脑可通过访问启动服务的ip和端口即可打开网页、访问项目。 ※注意:开启服务的主机和申请访问的设备必须在同一局域网下,即具有相同的访问IP。
- 分布式监控系统Zabbix3.2给异常添加邮件报警
- 分布式监控系统Zabbix3.2跳坑指南
- 一图看懂java内存模型
- 零代码如何打造自己的实时监控预警系统
- 一步一步在Windows中使用MyCat负载均衡 上篇
- 你真的会玩SQL吗?之逻辑查询处理阶段
- javascript中如何正确将日期(Date)字符串转换为日期(Date)对象?
- 全面迎接.Net3.0时代的到来(WCF/WF/WPF/LINQ)
- SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易
- [基础]datagridview绑定数据源的几种常见方式
- c#:winform鼠标拖动窗口大小时,设定窗口最小尺寸
- 在非SqlServer数据库上实现MemberShip和Role功能(自定义MemberShipProvider和RoleProvider)
- 一种实用的表格行鼠标点击高亮效果
- Lucene:QueryParser中操作符的疑惑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter中如何加载并预览本地的html文件的方法
- Android在自定义类中实现自定义监听器方式
- 解决WebView通过URL加载H5界面出现空白的问题
- kotlin 定义接口并实现回调的例子
- STL 总结与常见面试题
- kotlin中EditText赋值Type mismatch方式
- Kotlin 创建接口或者抽象类的匿名对象实例
- kotlin Context使用详解
- Android-ViewModel和LiveData使用详解
- 详解Android开发录音和播放音频的步骤(动态获取权限)
- Android自定义带圆角的ImageView
- 关于Kotlin写界面时诸多控件的点击事件
- Android webview注入JS代码 修改网页内容操作
- Kotlin 使用高阶函数实现回调方式
- Android WebView通过动态的修改js去拦截post请求参数实例