1.安装Django,网站下载Django,https://www.djangoproject.com/download/,解压到python安装目录,用CMD进入django目录,输入 python setup.py install
2.创建Django本地项目,将C:\Python27\Lib\site-packages\django\bin加入环境变量,新建一个文件夹DjangoDemo(命名可以随便的),CMD进入新建文件夹, 输入
django-admin.py startproject mysite 即新建了一个Django 项目
3.Django文件架构:
setting文件用于项目的参数设置,例如debug,urls用于声明url对应的函数,views用于储存urls中url对应的函数,__init__.py一般为空,不需要修改。
cmd中输入
>python manage.py runserver
运行服务器
4.urls文件说明
from django.conf.urls import patterns, include, url from django.contrib import admin #admin.autodiscover() 这句不知道有什么用 import views urlpatterns = patterns(‘‘, (r‘^$‘, views.hello), (r‘^%‘, views.hello1), (r‘^$‘, views.hello1 )) #当访问http://127.0.0.1:8000/hello是程序会运行views里面的hello函数,‘hello’是一个正则表达式
一个重点,正则表达式字符串的开头字母“r”。 它告诉Python这是个原始字符串,不需要处理里面的反斜杠(转义字符)。 在普通Python字符串中,反斜杠用于特殊字符的转义。比如n转义成一个换行符。 当你用r把它标示为一个原始字符串后,Python不再视其中的反斜杠为转义字符。也就是说,“n”是两个字符串:“”和“n”。由于反斜杠在Python代码和正则表达式中有冲突,因此建议你在Python定义正则表达式时都使用原始字符串。 从现在开始,本文所有URL模式都用原始字符串
5.views文件说明
from django.http import HttpResponse def hello(request): return HttpResponse("hello world") def hello1(request): return HttpResponse("hello world1")
函数必须有一个参数request,可以通过这个类访问http请求相关的数据,例如参数,路径等
6.从url中提取数据
#urls.py中的代码 (r‘^num/(\d+)$‘, printNum), #views.py中的代码 def printNum(request,num): return HttpResponse("hello i am %s"%num)
效果为访问http://127.0.0.1:8000/num/252 会返回hello i am 252
正则表达式中可以通过()来提取数据,(r‘^num/(\d+)$‘, printNum),会提取括号里面的数据作为printNum中的一个参数,所以printNum有两个参数
7.模板
需要在setting.py文件中添加模板路径
TEMPLATE_DIRS = ( ‘./mysite/t/‘, )#.代表manage.py所在的目录
views.py中的代码为:
def hello(request): return render_to_response(‘hello.html‘, {‘list1‘:[1,2,5,4]})
html:
<html> <body> hello world {%for i in list1%} {{i}} {%endfor%} </body> </html>
一个网上的html代码demo:
<html> <head><title>Ordering notice</title></head> <body> <h1>Ordering notice</h1> <p>Dear {{ person_name }},</p> <p>Thanks for placing an order from {{ company }}. It‘s scheduled to ship on {{ ship_date|date:"F j, Y" }}.</p> <p>Here are the items you‘ve ordered:</p> <ul> {% for item in item_list %} <li>{{ item }}</li> {% endfor %} </ul> {% if ordered_warranty %} <p>Your warranty information will be included in the packaging.</p> {% else %} <p>You didn‘t order a warranty, so you‘re on your own when the products inevitably stop working.</p> {% endif %} <p>Sincerely,<br />{{ company }}</p> </body> </html>
Python 的“真值”
在Python和Django模板系统中,以下这些对象相当于布尔值的False
空列表([] 空元组(() ) 空字典({} ) 空字符串(‘‘ ) 零值(0 ) 特殊对象None 对象False(很明显)
提示:你也可以在自定义的对象里定义他们的布尔值属性(这个是python的高级用法)。
除以上几点以外的所有东西都视为`` True``
模板继承
一般网站中的html都有一般分时固定的,例如导航栏,导入相应css,js文件等,django中可以用模板继承来实现
先新建一个基础模板base.html
<html> <body> hello world {%block content%} {%endblock%} hello world {%block time%} {%endblock%} </body> </html>
再建一个子模板child1.html:
{% extends "base.html"%}
{% block content%}i am content from child1{%endblock%}
{% block time%} i am time from child2{%endblock%}
views中的函数:
def hello1(request): return render_to_response(‘child1.html‘ )
这样返回的结果为:
<html><head></head><body> hello world i am content from child1 hello world i am time from child2 </body></html>
8.表单
属性/方法 | 说明 | 举例 |
---|---|---|
request.path | 除域名以外的请求路径,以正斜杠开头 | "/hello/" |
request.get_host() | 主机名(比如,通常所说的域名) | "127.0.0.1:8000" or "www.example.com" |
request.get_full_path() | 请求路径,可能包含查询字符串 | "/hello/?print=true" |
request.is_secure() | 如果通过HTTPS访问,则此方法返回True, 否则返回False | True 或者 False |
HTTP_REFERER,进站前链接网页,如果有的话。 (请注意,它是REFERRER的笔误。)
HTTP_USER_AGENT,用户浏览器的user-agent字符串,如果有的话。 例如: "Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" .
REMOTE_ADDR 客户端IP,如:"12.345.67.89" 。(如果申请是经过代理服务器的话,那么它可能是以逗号分割的多个IP地址,如:"12.345.67.89,23.456.78.90" 。)
除了基本的元数据,HttpRequest对象还有两个属性包含了用户所提交的信息: request.GET 和 request.POST。二者都是类字典对象,可以通过它们来访问GET和POST数据。
9.回话与认证
cookies
request.COOKIES
response.set_cookie("mycookies", "eeee")
session
request.session["fav_color"] = "blue" 设置SESSION
fav_color = request.session["fav_color"] 获取SESSION
del request.session["fav_color"] 删除SESSION
def setsession(request): request.session["name"]="kevin" return HttpResponse("done") def getsession(request): name=request.session["name"] return HttpResponse(name)
参考资料:http://djangobook.py3k.cn/2.0/chapter05/
原文:http://www.cnblogs.com/Xjng/p/3556931.html