Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的。 它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的 程序员 Adrian Holovaty 和 Simon Willison 开始用 Python 来编写程序。 当时他们的 World Online 小组制作并维护当地的几个新闻站点, 并在以新闻界特有的快节奏开发环境中逐渐发展。 这些站点包括有 LJWorld.com、Lawrence.com 和 KUsports.com, 记者(或管理层) 要求增加的特征或整个程序都能在计划时间内快速的被建立,这些时间通常只有几天 或几个小时。 因此,Adrian 和 Simon 开发了一种节省时间的网络程序开发框架, 这是在截止时间前能完成程序的唯一途径。 2005 年的夏天,当这个框架开发完成时,它已经用来制作了很多个 World Online 的站点。 当时 World Online 小组中的 Jacob Kaplan-Moss 决定把这个框架发布为一个开源软件。 从今往后数年,Django是一个有着数以万计的用户和贡献者,在世界广泛传播的完善开源项目。 原来的World Online的两个开发者(Adrian and Jacob)仍然掌握着Django,但是其发展方向受社区团队的影响更大。 这些历史都是相关联的,因为她们帮助解释了很重要的两点。 第一,Django最可爱的地方。Django 诞生于新闻网站的环境中,因此它提供很多了特性(如管理后台),非常适合内容类的网站,如Amazon.com, craigslist.org和washingtonpost.com,这些网站提供动态的,数据库驱动的信息。 (不要看到这就感到沮丧,尽管Django擅长于动态内容管理系统, 但并不表示Django主要的目的就是用来创建动态内容的网站。 某些方面特别高效与其他方面不高效是有区别的,Django在其他方面也同样高效。) 第二,Django的起源造就了它的开源社区的文化。 因为Django来自于真实世界中的代码,而不是 来自于一个科研项目或者商业产品,她主要集中力量来解决Web开发中遇到的问题,同样 也是Django的开发者经常遇到的问题。 这样,Django每天在现有的基础上进步。 框架的开发者对于让开发人员节省时间,编写更加容易维护的程序,同时保证程序运行的效率具有极大的兴趣。 无他,开发者动力来源于自己的目标:节省时间,快乐工作。 (坦率地讲,他们使用了自己公司的产品。)
安装:
自动化安装 #更新依赖库 pip install --upgrade setuptools #安装指定的版本 pip install Django==2.0.4
文件式安装 进入到Django文件安装目录,输入命令: python setup.py install
安装后打印版本号 python -m django –version
生成Django项目 django-admin startproject mysite 注意:有的django-admin找不到问题,需要配置环境变量
启动服务 python manage.py runserver
本地化中间件 'django.mididdleware.locale.LocaleMiddleware',
路由包括 精准路由和正则路由 #定义首页 首页留空 第二个参数 指定路由方法 path('',d1.index), #再定义一个路由 path('test',d1.test), #定义一个重定向页面 path('123',d1.re_url), #使用多个网址来指向同一个路由方法 path('456',d1.re_url), #定义存储cookie的路由 path('save_cookie',d1.save_cookie), #定义获取cookie的路由 path('get_cookie',d1.get_cookie), #定义删除cookie的路由 path('del_cookie',d1.del_cookie), #定义一个正则路由,可以使用\d数字 #常用元字符 .匹配所有 \d数字 \D非数字 \w 字母数字_ #如果在正则路由内,使用()分组,那么django会认为进行路由传参 # re_path('^test-\d -.*$',d1.test_re) re_path('^test-(\d )-(.*)$',d1.test_re)
Cookie 操作 #定义设置cookie(存储) def save_cookie(request): #定义回应 response = HttpResponse("存储cookie ok") #定义过期时间 expires = datetime(year=2019,month=11,day=20,hour=15,minute=5,second=0) #转储为django内置时间 expires = make_aware(expires) #进行存储动作 response.set_cookie("username","jack",expires=expires) #将回应对象返回 return response
#定义获取cookie(取) def get_cookie(request): #定义变量获取cookies属性 cookies = request.COOKIES #从cookies通过key获取value username = cookies.get("username","未拿到用户名") #将用户名返回 return HttpResponse(username)
#定义删除cookie方法 def del_cookie(request): #定义response对象 response = HttpResponse("删除cookie成功") #调用delete_cookie()方法来删除cookie response.delete_cookie("username") #返回response return response
Django 模板 采用了 jinja2模板 但是与flask有一定的出入需要注意
#导入模板解析库 from django.shortcuts import render
#模板传值 return render(request,'d2_index.html',{'test_str':test_str,'test_int':test_int,'test_list':test_list,'test_dict':test_dict,'content':content,'dt':dt})
{# 模板语法输出 #} {{ test_str }}
{# 加法运算 通过调用内置过滤器来实现加法运算 #}
{{ test_int | add:-10 }}
{# 模板输出list #} {{ test_list }} {{ test_list.2 }}
{% for item in test_list %} {{ item }} {# 打印索引 counter 从1开始的计数器 #} {{ forloop.counter }} {# 打印数组索引 #} {{ forloop.counter0 }} {# 倒序索引 #} {{ forloop.revcounter }}
{% endfor %}
{# 循环嵌套输出 #} {% for item in test_dict %} {# 取首位和末尾 #} 姓名:{{ item.name | first }} {{ item.name | last }} 年龄:{{ item.age }} {% endfor %}
{# 大小写互转 #} {{ 'jack' | upper }} {{ 'ROSE' | lower }}
{# 链式调用 #} {{ 'jack' | first | upper }}
{# 返回长度 #} {{ '123456' | length }}
{# 截断操作 #} 截断字符操作{{ content | truncatechars:20 }} 截断单词操作{{ content | truncatewords:3 }}
{# 格式化日期 #} {{ dt | date:"Y-m-d H:i:s" }}
Cookie简易操作 #定义回应 response = HttpResponse("存储成功") #第三个参数也可以传max_age,单位是秒 response.set_cookie("email",p1,max_age=10) #返回回应 return response 来源:http://www./content-4-113651.html |
|