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

CuterCorley 等级 671 0 0

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>

Python Django开发 经验技巧总结(二) 从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 %}

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

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.jpgPython Django开发 经验技巧总结(二) 在样式表中添加

body{background:url({% static 'images/background.jpg'%}) no-repeat;background-size:100% 100%;background-size:cover;}

重新加载http://127.0.0.1:8000/,你就会在页面上看到载入的背景图片。 Python Django开发 经验技巧总结(二)

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。

本文原文首发来自博客专栏Python Web开发实战,由本人转发至https://www.helloworld.net/p/9gGs7phjmiJ3,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/104037074查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

收藏
评论区

相关推荐

python算法
640?wx_fmtjpeg(https://imghelloworld.osscnbeijing.aliyuncs.com/c8238ed70f9664b61ce91f80786ca26f.png) 来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集。 其主要特点有以下
Django+Vue开发生鲜电商平台之1.项目介绍
我永远相信只要永不放弃,我们还是有机会的。最后,我们还是坚信一点,这世界上只要有梦想,只要不断努力,只要不断学习,不管你长得如何,不管是这样,还是那样,男人的长相往往和他的的才华成反比。今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。 马云 本项目旨在使用Django、Vue和REST Framewor
Python Django开发 经验技巧总结(二)
1.模板中变量的运算(1)加法markup{{value|add:value2}}返回的结果是valuevalue2的值,假设你value为40,value2为60 ,则该表达式返回结果为100(2)减法markup{{value|add value2}}与加法的性质一样,只不过是把第二个参数变成负数进行运算,返回的结果是va
Python Django开发 异常及解决办法(一)
1.ValueError: The view didn't return an HttpResponse object. It returned None instead该错误表明views.py中没有return一个返回值给前端。解决办法:检查 return HttpResponse()是否错位或者是否缺失。 2.NoReverseMat
Django+Vue开发生鲜电商平台之1.项目介绍
我永远相信只要永不放弃,我们还是有机会的。最后,我们还是坚信一点,这世界上只要有梦想,只要不断努力,只要不断学习,不管你长得如何,不管是这样,还是那样,男人的长相往往和他的的才华成反比。今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。 马云本项目旨在使用Django、Vue和REST Framewor
Python Django开发 异常及解决办法(二)
1.Django xadmin数据迁移报错ImportError: cannot import name 'QUERY_TERMS'在进行Django xadmin数据迁移时报错:pythonfrom django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMSImportError: cann
Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
胸怀是非常重要的,一个人有眼光没胸怀是很倒霉的。三国演义的周瑜就是眼光很厉害,胸怀很小,所以被诸葛亮气死了。宰相肚里面能撑船,说明宰相怨气太多了。他不可能每天跟人解释,只能干,用胸怀跟人解释。每个人的胸怀是靠委屈撑大的。 ——马云Github和Gitee代码同步更新:;。 一、普通方式实现商品列表页先了解Django中实现Json数据传递的基
Django+Vue开发生鲜电商平台之8.商品详情页功能实现
不走康庄大道,我自己喜欢做什么要比别人怎么看我更重要。 ——李彦宏Github和Gitee代码同步更新:;。 一、viewsets实现商品详情页商品详情页效果如下:可以看到,左侧有商品轮播图,右侧是商品的详情信息,包括商品名称、商品描述、是否包邮、市场价、本店价、销量、库存量、购物车按钮、收藏按钮,还包括富文本详情和热卖商品等。apps/go
CentOS 常见异常及解决办法
1.pip3安装mysqlclient报错python setup.py egg_info Check the logs for full command output.在CentOS上部署Django项目时,经常需要安装MySQL数据库引擎,如mysqlclient,在执行pip3 install mysqlclient命令时,可能会报错如下:
Django的安装与简易使用
Django的安装与简易使用 1.Django的简介Django是有Python编写的一个开源代码Web应用框架(网址:https://github.com/django/django)。他是基于MTV模式,其本质与MVC是一样的。具体是:1. M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)2. T 代表模板 (Template):负责
小白学习python该往哪方面走小白必看
整理了Python的7大就业方向,希望大家能找到适合自己的,然后学习下去,完成人生的目标。1、Web开发(Python后端)Python有很多优秀的Web开发框架,如Flask、Django、Bootstar等,可以帮助你快速搭建一个网站。当需要一个新功能时,用Python只需添加几行代码即可,这受到了很多初创型公司的一致欢迎。像知乎、豆瓣、小米这样的大厂,
浅析常用的Python Web的几大框架
在各种语言平台中,python涌现的web框架恐怕是最多的,是一个百花齐放的世界,各种microframework、framework不可胜数;猜想原因应该是在python中构造框架十分简单,使得轮子不断被发明。所 以在Python社区总有关于Python框架孰优孰劣的话题。下面就给大家介绍一下python的几大框架: Django Django 应该是最出
Python项目实战——手把手教你使用Django框架实现支付宝付款
一、前言大家好,我是Python进阶者。春节即将过去,大家过年期间肯定各种掏腰包花花花,小编相信大家在支付时候,微信、支付宝支付肯定是优先选择。今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用Python web框架Django来实现支付宝支付,废话不多说,一起来看看如何实现吧。 二、建立django应用我们来建立一个Django项目然后在里面创建
手把手教你用Django执行原生SQL
前言Hey,各位小伙伴,这次怎么来玩一下,如何使用Django执行原生SQL。我们都知道,Python在web界的扛把子——Django,可谓是集大成为统一,各种各样的插件、forms组件、model模型、Admin后台等等,后面我会专门出文章娓娓道来,反正就是一个字,NB。本次就来学一下,如何在Django执行原生语句。起因在使用Django时,一般情况下
一篇文章教会你使用Django根据现有数据库反向生成models
前言Hey,大家好呀,我是码农,星期八!熟悉Django的都知道,Django真是个好东西。复制粘贴一把梭很快都能撸出来一个web,再借助Django的Models和ORM。查询简直不要太方便!!!但是,但是,但是,真的如此吗??? Django Models遇到的问题通常情况下,我们是通过python manage.py makemigrationspy