分享

Python学习笔记八(网站开发)

 昵称QAb6ICvc 2013-01-25

Python学习笔记八(网站开发)

Python学习笔记八 (网站开发)   摘要:关于Django的开发入门与实践。Step By Step。参考网站: [http://www./obp/django/django-stepbystep/newtest/doc/] [http://www./obp/django/django-faq/TableOfContents.html]   一、安装 1.从http://www./download/上下载latest official version(0.96); 2.解压后,转到其目录下; 3.Windows下执行C:\Python24\python setup.py install;注:安装完后检查一下Python 的 Scripts目录是否在Path中,若不在,就加进去。Linux下安装可以参照这个步骤,不过没有实践过。   二、HelloWorld 0.Django 是一个框架,它有特殊的配置要求,因此一般不需要手工创建目录之类的工作, Django 提供了 django-admin.py 可以做这件事。 1.使用以下命令可以自动创建一个目录:django-admin.py startproject newtest 2.目录说明,目录中有以下几个主要文件:   __init__.py:表示这是一个 Python 的包;
  manage.py:提供简单化的 django-admin.py 命令,特别是可以自动进行 DJANGO_SETTINGS_MODULES 和 PYTHONPATH 的处理,而没有这个命令,处理上面环境变量是件麻烦的事情;
  settings.py:它是django的配置文件;
  uls.py:url映射处理文件; 3.测试。   到newtest目录中,运行:manage.py runserver,看Web Server是否能启动。如果成功,默认会打开8000端口,可以用浏览器测试一下(); 4.在 newtest 目录下创建一个文件 helloworld.py 内容为:  from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, Django.") 5.修改urls.py  from django.conf.urls.defaults import *
urlpatterns = patterns('',
    # Example:
    # (r'^newtest/', include('newtest.apps.foo.urls.foo')),
    (r'^$', 'newtest.helloworld.index'),

    # Uncomment this for admin:
#     (r'^admin/', include('django.contrib.admin.urls')),
)

6.刷新一下刚才打开的浏览页,你就能看到效果了。

三、相关概念 1.URL设计:URL与处理方法的映射;    URL设计的基本思想是用正则表达式来描述URL,并把URL和对应的Python函数挂接起来。 2.VIEW:视图,一般用于接收请求和输出响应; 3.Template:模板,用于页面内容的布局; 4.Tag:标签,放置在模板中,用于实现特殊处理并生成动态内容; 5.MTV:Django的设计方式,Models --->Template  --->Views; 6.MVC:模型-视图-控制器;   四、体验 1.简单的模版测试

>>创建templates目录;
>>修改 settings.py中的TEMPLATE_DIRS,增加'./templates';
>>编辑文件templates/list.html,作为模版文件,注意保存时使用UTF8; <h2>通讯录</h2>
<table border="1">
  <tr><th>姓名</th><th>地址</th></tr>
  {% for user in address %}
  <tr>
  <td>{{ user.name }}</td>
  <td>{{ user.address }}</td>
  </tr>
{% endfor %}
</table> >>编写 list.py; #coding=utf-8
from django.shortcuts import render_to_response

address = [
    {'name':'张三', 'address':'地址一'},
    {'name':'李四', 'address':'地址二'}
    ]

def index(request):
    return render_to_response('list.html', {'address': address}) >>修改 urls.py 映射关系,增加(r'^list/$', 'newtest.list.index'),
>>启动服务,访问http://127.0.0.1:8000/list/

2.连接数据库
>>修改 settings.py DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = './data.db'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
>>初始化数据库
改了配置还不够,还要执行相应的建库、建表的操作,使用 django-admin.py 或 manage.py 都可以:
manage.py syncdb
注意:sqlite3 对应的是 pysqlite2 模块,可以从 http:/// 下载到最新版本。

3.一个简单网站的测试:wiki
>>创建 wiki app
manage.py startapp wiki
>>编辑 wiki/models.py,相当于创建数据表 from django.db import models

# Create your models here.
class Wiki(models.Model):
    # char字段,长度20,唯一
    pagename = models.CharField(maxlength=20, unique=True)
    content = models.TextField() >>修改 settings.py, 安装 app INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'newtest.wiki', # 这行是增加的 ---------------------------------------
同步数据库:manage.py syncdb
>>在命令行下加入首页(FrontPage),命令manage.py shell >>> from newtest.wiki.models import Wiki
>>> page = Wiki(pagename='FrontPage', content='Welcome to Easy Wiki')
>>> page.save()
>>> Wiki.objects.all()
[<Wiki object>]
>>> p = Wiki.objects.all()[0]
>>> p.pagename
'FrontPage'
>>> p.content
'Welcome to Easy Wiki' >>修改 wiki/views.py #coding=utf-8
from newtest.wiki.models import Wiki
from django.template import loader, Context
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response

def index(request, pagename=""):     if pagename: #        pages = Wiki.objects.get_list(pagename__exact=pagename)
        pages = Wiki.objects.filter(pagename=pagename)
        if pages:             return process('wiki/page.html', pages[0])
        else:             return render_to_response('wiki/edit.html', {'pagename':pagename})

    else:
#        page = Wiki.objects.get_object(pagename__exact='FrontPage')
        page = Wiki.objects.get(pagename='FrontPage')
        return process('wiki/page.html', page)

def edit(request, pagename): #    page = Wiki.objects.get_object(pagename__exact=pagename)
    page = Wiki.objects.get(pagename=pagename)
    return render_to_response('wiki/edit.html', {'pagename':pagename, 'content':page.content})

def save(request, pagename):     content = request.POST['content']
#    pages = Wiki.objects.get_list(pagename__exact=pagename)
    pages = Wiki.objects.filter(pagename=pagename)
    if pages:
        pages[0].content = content
        pages[0].save()
    else:
        page = Wiki(pagename=pagename, content=content)
        page.save()
    return HttpResponseRedirect("/wiki/%s" % pagename)

import re

r = re.compile(r'\b(([A-Z]+[a-z]+){2,})\b')
def process(template, page):
    """处理页面链接,并且将回车符转为<br>"""
    t = loader.get_template(template)
    content = r.sub(r'<a href="/wiki/\1">\1</a>', page.content)
    content = re.sub(r'[\n\r]+', '<br>', content)
    c = Context({'pagename':page.pagename, 'content':content})
    return HttpResponse(t.render(c)) >>在 templates 中创建 wiki 子目录
>>编辑 templates/wiki/page.html <h2>{{ pagename }}</h2>
<p>{{ content }}</p>
<hr/>
<p>
<form method="POST" action="/wiki/{{ pagename }}/edit/">
<input type="submit" value="编辑">
</form></p> >>编辑 templates/wiki/edit.html <h2>编辑:{{ pagename }}</h2>
<form method="POST" action="/wiki/{{pagename}}/save/">
<textarea name="content" rows="10" cols="50">{{ content }}</textarea><br/>
<input type="submit" value="保存">
</form> >>修改 urls.py     (r'^wiki/$', 'newtest.wiki.views.index'),
    (r'^wiki/(?P<pagename>\w+)/$', 'newtest.wiki.views.index'),
    (r'^wiki/(?P<pagename>\w+)/edit/$', 'newtest.wiki.views.edit'),
    (r'^wiki/(?P<pagename>\w+)/save/$', 'newtest.wiki.views.save'),
注意:pagename会作为参数传入处理函数。
>>启动 server,访问http://localhost:8000/wiki

----------------------------------------------------------- 附录:一些Python开发的网站  豆瓣网,linux+lighttpd+fastcgi+Quixote+MySQL,lighttpd:是轻量级的Http应用唯客第三版
Beylog

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多