Python Django开发 经验技巧总结(二)

简介: 代码如下

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>

2345_image_file_copy_53.jpg

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 %}

2345_image_file_copy_54.jpg

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


2345_image_file_copy_55.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。

相关文章
|
13天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
96 44
|
8天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
32 3
如何使用Python开发API接口?
|
1天前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
28 15
|
1天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
9 1
|
7天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
14天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
55 7
|
16天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
探讨了Python开发中性能优化和代码审查的重要性,介绍了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
37 8
|
12天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
性能优化与代码审查:提升Python开发效率
23 1
|
14天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
28 2
|
15天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
18 3