zoukankan      html  css  js  c++  java
  • Python

    Django安装

    安装Django

    • pip3 install django

    测试你的安装

    >>> import django
    >>> print(django.get_version())
    1.10
    

    创建你的Django项目

    • django-admin.py startproject mysite

      这个命令竟会运行django-admin.py脚本,它将会为你创建一个名叫mysite的Django新项目.这个名字随便你取的.
      在你新创建的mysite项目里自动创建了两个项目:

    • 一个和mysite同名的目录.
    • 一个叫manage.py的Python脚本

       以下为这几个脚本的用途:

    • __init__.py:这是一个空的脚本,用来告诉Python编译器这个目录是一个Python包.
    • settings.py:用来存储Django项目设置的文件.
    • urls.py:用来存储项目里的URL模式.
    • wsgi.py:用来帮助你运行开发服务,同时可以帮助部署你的生产环境.

       在项目里还有一个叫做manage.py的文件.这个文件是我们开发项目时经常使用的文件,它为我们提供了一系列的Django命令.例如,manage.py允许你运行内建的Django服务来测试和运行数据库命令.真的,这个脚本是你最常用的脚本了.

    启动你的项目

       运行manage.py脚本,启动项目

    [root@yang ]# python3 manage.py runserver 0.0.0.0:8000
    Performing system checks...
    
    System check identified no issues (0 silenced).
    
    You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
    Run 'python manage.py migrate' to apply them.
    August 29, 2016 - 15:51:27
    Django version 1.10, using settings 'Djanjo.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CTRL-BREAK.
    

    检查启动

    [root@yang ]# python3 manage.py  migrate
    Operations to perform:
      Apply all migrations: admin, auth, contenttypes, sessions
    Running migrations:
      Rendering model states... DONE
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying auth.0008_alter_user_username_max_length... OK
      Applying sessions.0001_initial... OK
    

      migrate命令会检查你的INSTALLED_APPS设置,同时会创建你的mysite/settings.py文件中相关的app的数据库图表(我们稍后会介绍).你将会看到所有初始化的信息.
      现在你就可以通过浏览器直接访问了 http://127.0.0.1:/8000

    创建Django应用

    __1). __ 通过一系列的设置和各种应用就可以组成一个web应用和网站,每个Django应用的存在都对应它实现的一种功能.针对不同的功能你需要创建不同的应用.

    [root@yang-200-87 /home/yang/mysite]# python3 manage.py startapp rango
    

      这个命令在你的项目根目录里创建了一个新的名叫rango的目录 - 这里面包含了5个Python脚本:

    • __init__.py,这是一个空的脚本,用来告诉Python编译器这个目录是一个Python包.
    • models.py,一个存储你的应用中数据模型的地方 - 在这里描述数据的实体和关系.
    • tests.py,存储你应用的测试代码.
    • views.py,在这里处理用户请求和响应.
    • admin.py,在这里你可以向Django注册你的模型,它会为你创建Django的管理界面.

      views.py和models.py在每个应用中都要用到,他们俩是Django设计模式的组成部分,例如Model-View-Template模式.

    __2). __ 在你创建模型和视图之前,你必须要告诉Django你的新应用的存在.所以你必须修改你配置目录里的settings.py文件.打开文件找到INSTALLED_APPS元组.在元祖的最后面增加rango:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'rango',
    ]
    

    __3). __ 既然我们已经创建好Rango,让我们创建一个简单的视图.作为我们的第一个视图,我们就简单的把文本传送给客户端 - 我们现在不必关心模型或者模板:

     from django.shortcuts import render
    from django.http import HttpResponse
    
    def test(request):
            return HttpResponse('This is my first Django page!')
    
    • 我们第一行首先从django.http模块导入HttpResponse对象.
    • 在views.py文件里每个视图对应一个单独的函数.在这个例子中我们只创建了一个test视图.
    • 每个视图至少带一个参数 - 一个在django.http模块的HttpRequest对象.
    • 每个视图都要返回一个HttpResponse对象.本例中这个HttpResponse对象把一个字符串当做参数传递给客户端.

    URL映射

    __1). __ 在rango目录里,我们需要创建一个叫做urls.py的文件.文件里是可以设置你的应用映射到URL:

    from django.conf.urls import  url
    from rango import views
    
    
    urlpatterns = [
            url(r'test', views.test, name='test'),
    ]
    

    __2). __ 打开项目目录中的 urls.py文件,添加映射:

    from django.conf.urls import url
    from django.contrib import admin
    from django.conf.urls import include
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^rango/', include('rango.urls')),
    ]
    

      新增的映射将会寻找匹配^rango/的url字符串.如果匹配成功的话将会传递给rango.urls(我们已经设置过了).include()函数是从django.conf.urls导入的.整个URL字符串处理过程如下图所示.在这个过程中,域名首先被提取出来然后留下其他的url字符串(rango/)传递给我们的tango_with_django_project,在这里它会匹配并去掉rango/然后把空字符串传递给rango应用.Rango现在匹配一个空字符串,它会返回我们创造的test()视图.

    使用模板

    __1). __ 设置模板目录

      为了建立和启动模板,你需要设置一个储存模板的目录.
      在你的Django项目目录(mysite)里,创建一个新的目录叫做templates.在这个目录里创建另一个rango目录.所以我们将在mysite/templates/rango/目录里存放关于rango应用的模板.
      为了告诉Django我们的模板在哪里,我们需要修改项目的settings.py文件.找到TEMPLATE_DIRS并把创建的templates目录路径加入到里面:

    TEMPLATE_PATH = os.path.join(BASE_DIR,'templates')
    
    TEMPLATE_DIRS = [
            TEMPLATE_PATH,
    ]
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': TEMPLATE_DIRS,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    

    __2). __ 添加模板
      在我们创建模板目录和设置好路径以后,我们需要在template/rango/目录里建立一个叫做index.html的文件,在新文件里加入下面代码:

    <!DOCTYPE html>
    <html>
    
        <head>
            <title>Rango</title>
        </head>
    
        <body>
            <h1>Rango says...</h1>
            hello world! <strong>{{ boldmessage }}</strong><br />
            <a href="/rango/about/">About</a><br />
        </body>
    
    </html>
    

      这个HTML代码创建一个问候用户的简单HTML页面.你可能注意到了在上面有一段非HTML代码{{boldmessage}}.这是Django模板的变量,他可以在输出时为这个变量赋值.一会我们就会用它.
      为了使用这个模板,我们需要在rango/views.py里添加如下代码:

    def index(request):
        context_dict = {'boldmessage':"i am bold font form the context"}
        return render(request,'rango/index.html', context_dict)
    

       为此模板添加URL映射:

    urlpatterns = [
        url(r'yang', views.yang, name='yang'),
        url(r'index', views.index, name='index'),
    ]
    

       首先我们建立一个在模板中使用的字典,然后我们调取render()函数.这个函数接受用户的request,模板名称和内容字典作为参数.这个render()函数将会把这些参数聚合到一起生成一个完整的HTML页面.然后返回给用户的浏览器.
       当模板文件被加载到Django模板系统里时,它模板内容也会被创建.在简单的例子里模板的内容是字典里的模板变量对应的Python变量.在我们早先创建的模板文件,我们创建了一个叫做boldmessage的模板变量.在index(request)视图例子中,字符串I am bold font from the context映射到模板变量boldmessage.所以字符串I am bold font from the context将会替换模板里所有的{{ boldmessage }}.

    __3). __ 使用静态媒体

       为了增加样式和引入动态行为我们可以在我们的网站里加入CSS,Javascript和图像这些静态媒体.这些文件和网页有一些不同.这是因为它们不想HTML页面是生成出来的.

    3.1). 设置静态媒体目录
        为了设置静态媒体,你需要设立存储它们的目录.在你的项目目录,创建叫做static的目录.在static里再创建一个images目录. 并在statec/images目录里放一张图片123.jpg
       我们需要告诉Django我们创建了static目录.在settings.py文件,我们需要更新两个变量STATIC_URL和STATICFILES_DIRS元组,像下面一样创建一个储存静态目录(STATIC_PATH)的变量:

    STATIC_URL = '/static/'
    
    STATIC_PATH = os.path.join(BASE_DIR,'static')
    
    STATICFILES_DIRS = (
        STATIC_PATH,
    )
    
    • 第一个变量STATIC_URL定义了当Django运行时Django应用寻找静态媒体的地址.例如,像我们上面的代码一样吧STATIC_URL设置成/static/,我们就可以通过http://127.0.0.1:8000/static/来访问它了.

    • STATIC_URL定义了web服务链接媒体的URL地址,STATICFILES_DIRS允许你定义新的static目录.像TEMPLATE_DIRS元组一样.STATICFILES_DIRS需要static目录的绝对路径.这里,我们重新用5.1章的BASE_DIR变量来创建STATIC_PATH.

    • 完成了这两个设置后,再一次运行你的Django服务.如果我们想要查看我们的Rango图片,访问http://127.0.0.1:8000/static/images/123.jpg.

      __3.2). __ 现在你已经为你的Django项目设置了静态媒体,你可以在你的模板里加入这些媒体.
       修改HTML源码,加入文件引用:

    <!DOCTYPE html>
    {% load staticfiles %} 
    <!-- New line -->
    
    <html>
    
        <head>
            <title>Rango</title>
        </head>
    
        <body>
            <h1>Rango says...</h1>
            hello world! <strong>{{ boldmessage }}</strong><br />
            <a href="/rango/about/">About</a><br />
            <img src="{% static "images/rango.jpg" %}" alt="Picture of Rango" /> <!-- New line -->
        </body>
    
    </html>
    

      首先,我们需要使用{% load static %}标签来使用静态媒体.所以我们才可以用{% static "rango.jpg" %在模板里调用static文件.Django模板标签用{ }来表示.在这个例子里我们用static标签,它将会把STATIC_URL和123.jpg连接起来,如下所示:

    <!DOCTYPE html>
    {% load static %}
    <html>
    
        <head>
            <title>Rango</title>
        </head>
    
        <body>
            <h1 class="c1">Rango says...</h1>
            hello world! <strong>{{ boldmessage }}</strong><br />
            <a href="/rango/yang/">About</a><br />
            <img src = "{%  static "images/123.jpg" %}" alt="Picture of Rango" />
        </body>
    
    </html>
    

      当你希望在模板里使用静态媒体你需要调用{% static %}函数.下面的代码将展示给你如何在你的模板里添加Javascript,CSS和图片:

    <!DOCTYPE html>
    {% load static %}
    <html>
    
        <head>
            <title>Rango</title>
                    <link rel="stylesheet" href="{% static "css/base.css" %}" /> <!-- CSS -->
            <script src="{% static "js/jquery.js" %}"></script> <!-- JavaScript -->
        </head>
    
        <body>
            <h1 class="c1">Rango says...</h1>
            hello world! <strong>{{ boldmessage }}</strong><br />
            <a href="/rango/yang/">About</a><br />
            <img src = "{%  static "images/123.jpg" %}" alt="Picture of Rango" />
        </body>
    
    </html>
    

    模型和数据库

       通常来说处理数据库需要我们掌握许多复杂的SQL语句.但是在Django里,对象关系映射(ORM)帮我们处理这一切,包括通过模型创建数据库表.事实上,模型是描述你的数据模型/图表的一个Python对象.与以往通过SQL操作数据库不同,你只用使用Python对象就能操作数据库.在本章,我们将会学习如何设立数据库并为Rango建立模型.

    __1). __ 告诉 Django 你的数据库

       在你创造任何模型之前都要对你的数据库进行设置.在Django1.7,当你创建了一个项目,Django会自动在settings.py里添加一个叫做DATABASES的字典.它包含如下:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    

    __2). __ 创建模型

       在rango/models.py里,我们定义两个继承自djnago.db.models.Model的类.这两个类分别定义目录和页面.定义Category和Page如下:

    from django.db import models
    
    class Category(models.Model):
        name = models.CharField(max_length=128,unique=True)
    
        def __unicode__(self):
            return self.name
    
    
    class Page(models.Model):
        category = models.ForeignKey(Category)
        title = models.CharField(max_length=128)
        url = models.URLField()
        views = models.IntegerField(default=0)
    
        def __unicode__(self):     
            return self.title
    

       当你定义了一个模型,你需要制定可选参数的属性以及相关的类型列表.Django提供了许多内建字段.一些常用的如下:

    • CharField,存储字符数据的字段(例如字符串).max_length提供了最大长度.
    • URLField,和CharField一样,但是它存储资源的URL.你也可以使用max_length参数.
    • 'IntegerField',存储整数.
    • DateField,存储Python的datetime.date.

       Django也提供了连接模型/表的简单机制.这个机制封装在3个字段里,如下:

    • ForeignKey, 创建1对多关系的字段类型.
    • OneToOneField,定义一个严格的1对1关系字段类型.
    • ManyToManyFeild,当以多对多关系字段类型.

    __3.) __ 创建和迁移数据库

       我们定义了模型,那么Django就能很好的自动创建我们的数据库.

    python3 manage.py migrate
    

       当你更改模型的时候,你需要通过makemigrations进行修改,所以对于rango,我们需要:

    python3 manage.py makemigrations rango
    

    __4.) __ Django模型和Django Shell

       在我们把注意力集中到Django管理界面之前,通过Django shell创建Django模型也是值得一试的 - 它对我们debug非常有用.下面我们将展示如何用这种方式来创建Category实例.
       为了得到shell我们需要再一次调用Django项目根目录里的manage.py.

    python3 manage.py shell
    

       这个实例将会创建一个Python解析器并且载入你的项目的设置.你可以和模型进行交互.下面的命令展示了这一功能.注释里可以看到每个命令的功能:

  • 相关阅读:
    [zt]活法
    Oracle: wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
    主题:福布斯中文网的一篇关于 宽带山男和篱笆女的文章
    Oracle:指定时间范围内的周分组输出.
    Oracle:查看表空间使用情况.
    Oracle:SQL优化基本步骤
    .NET调用ORACLE存储过程使用数组参数
    CTM CJQ高手指点怎么输出手法
    Oracle:DBMS_RANDOM.VALUE取随机数.
    ASPNET:DateFormatString详解
  • 原文地址:https://www.cnblogs.com/postgres/p/5829529.html
Copyright © 2011-2022 走看看