• Django的安装配置和开发


    参考:《Django Web开发指南》

    Django的安装配置

    1、https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz
    2、在ubuntu下载解压:tar xzvf Django-1.5.1.tar.gz
    3、切换到root,在Django-1.5.1/下执行 python setup.py install
    4、安装在/usr/local/lib/python2.7/dist-packages/下
    5、创建work目录,执行 django-admin.py startproject mysite
    6、进入mysite目录,启动django服务器:
    1)、python manage.py runserver
    在浏览器中输入http://192.168.9.155:8080
    2)、python manage.py runserver 0.0.0.0:8000
    在浏览器中输入http://192.168.9.155:8000
    可以看到相应页面了

    创建APP,一个简易Blog

    1、在mysite/下执行 python manage.py startapp blog,这样就创建完了,然后要把该app加到配置文件work/mysite/mysite/setting.py中,在INSTALLED_APPS 中增加'mysite.blog',并把'django.contrib.admin',和'django.contrib.admindocs',的注释去掉
    INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',
        # Uncomment the next line to enable the admin:
        'django.contrib.admin',
        # Uncomment the next line to enable admin documentation:
        'django.contrib.admindocs',
    )

    2、然后就可以编辑自己的模板了,编辑work/mysite/blog/models.py文件如下:
    from django.db import models
    # Create your models here.
    class BlogPost(models.Model):
         title = models.CharField(max_length= 150)
         body = models.TextField()
         timestamp = models.DateTimeField()

    3、修改mysite目录下urls.py:
    from django.contrib import admin
    admin.autodiscover()
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)), 
    的注释去掉
    编辑完成后就可以在 settings.py 中配置数据库了,编辑配置文件中关于database的内容如下:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'django',                      # Or path to database file if using sqlite3.
            # The following settings are not used with sqlite3:
            'USER': 'johnny',
            'PASSWORD': '0000',
            'HOST': '192.168.9.155',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
            'PORT': '3306',                      # Set to empty string for default.
        }
    }
    注意:django数据库必须是已经建立好的数据库

    4、现在你可以告诉Django用你提供的连接信息去连接数据库并且设置应用程序所需要的表,执行命令:./manage.py syncdb
    可能会遇到错误:
    django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
    解决办法:
    1)、在http://sourceforge.net/projects/mysql-python/files/mysql-python-test/1.2.4b4/下载MySQL-python-1.2.4b4.tar.gz
    解压后执行python setup.py build ,如果出现错误,需要到https://pypi.python.org/pypi/distribute/0.6.28 下载distribute-0.6.28.tar.gz
    解压后执行python setup.py install 安装;
    在到MySQL-python-1.2.4b4目录执行python setup.py build 成功;再执行python setup.py install 
    2)、或者apt-get安装:sudo apt-get install python-mysqldb
    5、再次到mysite执行./manage.py syncdb
    Creating tables ...
    Creating table auth_permission
    Creating table auth_group_permissions
    Creating table auth_group
    Creating table auth_user_groups
    Creating table auth_user_user_permissions
    Creating table auth_user
    Creating table django_content_type
    Creating table django_session
    Creating table django_site
    Creating table blog_blogpost
    
    You just installed Django's auth system, which means you don't have any superusers defined.
    Would you like to create one now? (yes/no): yes
    Username (leave blank to use 'johnny'): 
    Email address: heqiangfly@163.com
    Password: 
    Password (again): 
    Superuser created successfully.
    Installing custom SQL ...
    Installing indexes ...
    Installed 0 object(s) from 0 fixture(s)

    6、启动Server:python manage.py runserver 0.0.0.0:8000,在浏览器中登录:http://192.168.9.155:8000/admin/就可以看到登录界面了;
    7、此时你会发现我们新建的sblog并没有出现,那么在blog目录下新建admin.py,编辑如下代码,刷新admin页面,你会有新的发现:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from django.contrib import admin
    from sblog.models import BlogPost
    
    admin.site.register(BlogPost)

    8、每次往项目里面添加新的应用后,都要运行一下./manage.py syncdb命令确保它所需要的表已经在数据库里创建了。否则会出现如下的错误:
    DatabaseError: (1146, "Table 'django_blog.django_admin_log' doesn't exist")
    9、这时你可以点页面上的Blogs posts后面的Add来发表一篇博客了;编辑完title和内容并获得日期和时间后,点击save保存,你到一个列出你所有blog贴子的列表,你会发现贴子的名称“BlogPost object”,是不是看着不顺眼呢?下面的代码可以变得让他顺眼一些:用blog的名称来在列表上显示:
    在model.py上添加:
    from django.contrib import admin
    class BlogPostAdmin(admin.ModelAdmin):
        list_display = ('title','timestamp')
    在admin.py中修改:
    from blog.models import BlogPost ,BlogPostAdmin
    admin.site.register(BlogPost,BlogPostAdmin)
    点击刷新页面,列表的title会显示你blog的标题,并显示时间戳;


    创建Blog的公共部分:

    1、创建完应用的数据库部分和admin部分后,接下来看看面向公众的网页部分。从Django的角度来看,一个页面具有三个典型的组建:模版、视图和URL模式
    a、创建模版:编辑一个archive.html的网页,并放到blog/templates目录下:
    {% for post in posts %}
    <h2>{{post.title}}</h2>
    <p>{{post.timestamp}}</p>
    <p>{{post.body}}</p>
    {% endfor %}
    b、创建视图函数:
    在view.py中输入:
    from django.template import loader,Context
    from django.http import HttpResponse
    from blog.models import BlogPost
    
    
    def archive(request):
        posts = BlogPost.objects.all()
        t = loader.get_template("archive.html")
        c = Context({'posts':posts})
        return HttpResponse(t.render(c))
    c、创建一个URL模式:
    将mysite下urls.py的下面一行注释去掉并修改:
    url(r'^blog/', include('blog.urls')),
    在blog目录中创建一个新的urls.py并编辑:
    from django.conf.urls.defaults import *
    from blog.views import archive
    
    urlpatterns = patterns('',
        url(r'$',archive),
    )

    2、在浏览器中输入http://192.168.9.155:8000/blog/,你会看到一个很清新的页面,有贴子的标题,时间和正文

    其他优化:

    1、模版
    如果你的站点有一个blog、一个相册和一个链接页面,那么你或许要用到模版:
    在blog/templates里面创建一个base.html的模版,内容如下:
    {% block content %}
    <html>
    <style type="text/css">
    body{color:#efd;background:#453;padding:0 5em;margin:0}
    h1{padding:2em 1em;background:#675}
    h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
    p{margin: 1em 0}
    </style>
    <body>
    <h1>Johnny.He 的博客</h1>
    {% block content %}
    {% endblock %}
    </body>
    </html>

    修改archive.html让它引用基础模版:
    {% extends "base.html" %}
    {% block content %}
    {% for post in posts %}
    <h2>{{post.title}}</h2>
    <p>{{post.timestamp}}</p>
    <p>{{post.body}}</p>
    {% endfor %}
    {% endblock %}

    这里{% extends "base.html" %}标签告诉Django去查找一个叫base.html的标签,并将这个模块命名块的内容填入到那个模版里相应的块里;
    刷新blog,你将会看到一个不一样的页面;
    2、按日期排序:
    你应该已经注意到博客列表不是按照传统的日期来排序的,要做到这个功能,在Django中有好几种方法可供选择。可以在model中加入一个默认的排序:
    在class BlogPost(models.Model):类中加入一个嵌套类:
         class Meta:
             ordering = ('-timestamp',)
    刷新http://192.168.9.155:8000/blog/,就可以看到博客最新的贴子已经排到上面了
    3、通过模版过滤器格式化时间戳:
    如果你觉得Aug. 7, 2013, 3:32 p.m.这种时间戳格式看着不爽,那么通过下面操作可以变得更好:
    打开archive.html将<p>{{post.timestamp}}</p>改为<p>{{post.timestamp|date}}</p>,这样会把3:32 p.m过滤掉
    改为<p>{{post.timestamp|date:"Y,F jS,l"}}</p>,会变成:2013,August 7th,Wednesday 的格式


  • 相关阅读:
    Request 获取网址各片段
    网上购物系统(Task008)——用户界面层公共函数集WebUtility
    网上购物系统(Task010)——FormView编辑更新商品详细信息
    网上购物系统(Task011)——FormView插入删除商品详细信息
    网上购物系统(Task004)——通用数据库访问函数
    网上购物系统(Task009)——FormView显示商品详细信息
    今天上了个新网站,减肥族
    http://www.fluorinefx.com/
    山河有异,风景已非。神州陆沉,百年丘墟
    上次发布的网站网址错了
  • 原文地址:https://www.cnblogs.com/riskyer/p/3243910.html
Copyright © 2020-2023  润新知