zoukankan      html  css  js  c++  java
  • Django小示例

    创建项目,在命令行中输入:django-admin startproject mysite

    则会创建一个名为mysite的项目。项目结构如下:

    +mysite

               |--+ugo

               |          |--+migrations

               |          |--__init__.py

               |          |--admin.py

               |          |--apps.py

               |          |--models.py

               |          |--tests.py

               |          |--views.py

               |--+mysite

               |               |--+__pycache__

               |               |--__init__.py

               |               |--settings.py

               |               |--urls.py

               |               |wsgi.py

               |--manage.py  

               |--db.sqlite3

               |--+templates

               |--+static

    manage.py是主要的管理程序。

    db.sqlite3是在执行完python manage.py migrate之后产生的,用于对应数据库。

    urls.py用于指明什么样的url对应哪一种方法的对应关系。

    settings用于设置整个项目,例如加入什么功能。

    wsgi.py部署到主机上才会用到。

    在mysite目录下执行 python manage.py startapp ugo ,会在mysite下创建一个app。ugo文件夹中包含__init__.py文件,说明

    它是作为一个可导入的包,所以需要导入ugo才能看到这个模块中的内容。需要在settings中的变量INSTALLED_APPS中加

    入ugo。

    views.py用于编写被调用函数的具体实现

    如果有必要设置模板template文件,让正确的模板在views.py中可调用,用于把函数执行完的结果转移到对应的模板中。可自行在mysite下创建文件夹templates存放html文件。创建完后在settings.py中把TEMPLATES变量中的DIRS的设置为templates的具体位置,例'DIRS': [os.path.join(BASE_DIR,'templates').repalce('\','/')],

    如果有必要设置models.py,建立与数据库的对应关系。

    模板的使用

    1.在setting.py中设置templates模板的目录

    2.在urls.py中设置网址与函数(index)的映射

    3.创建在templates下创建编辑index.html文件

    4.在views.py视图中编辑index函数,函数返回的经过加工和传参的Index.html文件以HttpResponse(html)的形式

    5.在model.py中设置存储数据的模板,用于和数据库进行交互

     

    设置urls.py的网址与函数的对应关系

    ffrom django.conf.urls import url

    from django.contrib import admin

    from ugo.views import index 

    urlpatterns = [

        url(r'^admin/', admin.site.urls),

        url(r'^$',index)

    ]

    url()的第一个参数是正则表达式。用于匹配网址域名后的内容,r'^$'表示域名后没有任何内容,即http://localho

    st:8000/这个网址,则会调用函数index.正则表达式中使用小括号括起来的部分会被当作参数,传给后面的函数。

    在templates目录下创建index.html文件(使用{{now}}把变量now传入)

    <!DOCTYPE html>

    <html>

    <head>

        <meta charset="utf-8">

        <title>

            我的第一个Django网站

        </title>

    </head>

    <body>

    <h1>欢迎光临</h1>

    <h2>现在时刻: {{now}}</h2>

    </body>

    </html>

    如果传递的变量是列表形式,在模板中可用for循环:

    <h3>User lists</h3>

    <ul>

        {% for user in userlist %}

        <li>{{user.name}}</li>

        {% empty %}

        <p>There is no user in the list</p>

        {% endfor %}

    </ul

    {% for user in userlists %}和{% endfor %} 是一对。如果userlists是空列表就会显示放在{% empty %}下的内容。

    编辑views.py的index(request)函数

    from django.http import HttpResponse

    from django.template.loader import get_template

    from datetime import datetime 

    def index(request):

        template=get_template('index.html')

        html=template.render({'now':datetime.now})

        return HttpResponse(html)

    导入HttpResponse把输出的内容转换成HTTP的格式。

    使用get_template()加载index.html文件,然后使用方法render()以字典形式传入变量now.对与多个入参变量,可以

    使用locals()方法,它的功能是以字典形式返回所有当前在内存中的局部变量。例

    template=get_template('index.html')

    now=datetime.now

    userlists=list()

    userlist.append({'nane':'Richard'})

    userlist.append({'nane':'John'})

    userlist.append({'nane':'Mary'})

    html=template.render(locals())

    就可以把now,userlists这两个变量一并传递到template.renders中

    这时在mysite目录下运行python manage.py runserver ,然后在浏览器中输入http://localhost:8000就会看到

    ‘欢迎光临!’这几个字。

    tempalte中的模板也可以设置一个基础模板,然后在个性化的模板中继承该模板

    例,编写基础模板:

    <!DOCTYPE html>

    <html>

    <head>

        <meta charset="utf-8">

        <title>{%block title %}{% endblock %}</title>

    <body>

    <header>...</header>

    <nav>...</nav>

    {% block main %} {% endblock %}

    <footer>...</footer>

    </body>

    </head>

    </html>

    保存为base.html,然后在子模板中使用 extends这个文件,,然后设置title和content就可以了

    {% extends 'base.html' %}

    {% block title %} 欢迎光临 {% endblock %}

    {% block main % }

    ...这里放所有想要呈现的index.html中的主要内容...

    {% endblock  %}

    详情可参考 https://docs.djangoproject.com/en/1.7/topics/templates/

     

    关于静态文件,不需要设置url与函数对应(通过函数来加工),直接显示要获取的文件,就是静态文件。在settings.py中

    设置静态文件的根网址 STATIC_URL='/static/',

    也就是网址前部分为http://localhost:8000/static时就会直接到静态文件目录读取文件。

    设置静态文件的本地路径 STATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),],在项目路径下创建文件夹static,在static里可按文件类别分别创建文件夹js,css,images.

    在templates模板文件中获取静态文件:

    ...省略...

    {% load staticfiles %}

    <img src="{% static 'images/logo.png' %}" width=150/>

    ...省略...

    5.models.py的基本格式如下:

    class urllist(models.Model):

        src_url=models.URLField()

        short_url=models.CharField(max_length=20)

        count=models.PositiveIntegerField()

        

        def __unicode__(self):

            return self.short_url

    models中的数据类型及特性,具体可查看 https://docs.djangoproject.com/en/1.9/ref/models/fields/

    在models中创建class,存盘后,可使用命令 python manage.py check 以确认所有设置的正确性。

    python manage.py makemigrations ugo,最后的ugo表示我们创建的app ugo。

    c:pythonScriptsmysite>python manage.py check

    System check identified no issues (0 silenced).

     

    c:pythonScriptsmysite>python manage.py makemigrations ugo

    Migrations for 'ugo':

      ugomigrations001_initial.py

        - Create model urllist

     

    c:pythonScriptsmysite>python manage.py migrate

    Operations to perform:

      Apply all migrations: admin, auth, contenttypes, sessions, ugo

    Running migrations:

      Applying ugo.0001_initial... OK

     

    以上三步都没报错,说明这个数据表已经被创建完成,可以拿来使用了。

    可以启用django预装的admin功能操作DB.sqlite3数据库。

    在APP目录(ugo)下找到admin.py,将我们的数据模型做好注册即可:

    from django.contrib import admin

     

    # Register your models here.

    from ugo.models import urllist

    admin.site.register(urllist)

    然后创建数据库的管理员账号

    python manage.py createsuperuser

    Username: admin

    Email address: skynet.tw@gmail.com

    Password:

    Password (again):

    在启动web服务器(python manage.py runserver)后,在浏览器中输入:localhost:8000/admin就可看到数据库

    登陆界面,登陆后可看到admi主界面。

  • 相关阅读:
    MySQL数据库服务器的架设
    Ubuntu 16.04 LTS软件包管理基本操作
    2个 List<T>进行数据合并
    创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或
    【转】.gitignore失效的解决办法
    【转】码农提高工作效率
    【转】从零开始编写自己的C#框架(7)——需求分析
    C#获取文件的绝对路径
    【转】类中如何引用server.MapPath()
    c# 运行时替换某文件源代码(将XML 转换成 某个枚举并写入源文件)
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9547332.html
Copyright © 2011-2022 走看看