zoukankan      html  css  js  c++  java
  • django

    Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的。 它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的 程序员 Adrian Holovaty Simon Willison 开始用 Python 来编写程序。

    当时他们的 World Online 小组制作并维护当地的几个新闻站点, 并在以新闻界特有的快节奏开发环境中逐渐发展。 这些站点包括有 LJWorld.comLawrence.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.orgwashingtonpost.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

  • 相关阅读:
    python 日期、时间戳转换
    判断任意数字是否为素数
    linux使用工具记录
    python日志记录-logging模块
    python特性、属性以及私有化
    python 装饰器、内部函数、闭包简单理解
    sql语句操作记录
    virtualBox使用nat模式下ssh连接
    git常用操作
    分布式CAP定理(转)
  • 原文地址:https://www.cnblogs.com/bo686/p/10370762.html
Copyright © 2011-2022 走看看