django-admin.py startproject web01
cd ./web01
django-admin.py startapp blog
url(r'^blog/index/$','blog.views.index')
from django.http import HttpResponse
def index(req):
return HttpResponse('<h1>Hello,Django!</h1>')
class Employee(models.Model):
name = models.CharField(max_length = 20) #创建字段name
def __unicode__(self):
return self.name #对象以字符串形式输出时返回name
class Employer(models.Model):
name = models.CharField(max_length = 30)
class Employee(models.Model):
name = models.CharField(max_length = 30)
employer = models.ForeignKey(Employer)
多个Employee对应一个Employer
Employer可通过employee_set查看底下的所有employee。
class Author(models.Model):
name = models.CharField(max_length = 30)
class Book(models.Model):
name = models.CharField(mat_lenth = 30)
authors = models.ManyToManyField(Author)
一个作者可以有多本书,一本书也可以有多个作者。
我们还可以对数据进行一些操作:
#模型数据操作
#方式1
b = Book()
b.name = 'python book'
#方式2
b = Book(name = 'python book')
#方式3
b = Book.objects.create(name = 'python book')
b.save()
b.authors.add(jiange) #增
b.authors.remove(jiange) #删
b.authors.all() #查
b.authors.filter(name__exact = 'jiange') #过滤查找
python manage.py syncdb
yum -y install mysql-server
yum -y install MySQL-python
service mysqld start #启动数据库服务
mysql -u root -p #登录数据库
<title>{{title}}</title>
<body>
<h1>hello {{user.name}}</h1>
</body>
变量放在2个大括号中;
可传递普通变量,字典,列表,对象,方法(无参数,有特定返回值)等
优先级:字典>属性>方法>列表
from django.template import loader,Context
from django.http import HttpResponse
def index(req):
title = 'mypage'
user = {'name':'jiange','sex':'male'}
t = loader.get_template('index.html') #将html文件内容加载过来
c = Context({'title':title,'user':user}) #生成Context对象
return HttpResponse(t.render(c)) #将c中的数据渲染到t中,并返回
简化:
from django.shortcuts import render_to_response
def index(req):
title = mypage
user = {'name':'jiange','sex':'male'}
render_to_response('index.html',{'title':title,'user':user})
ipython manage.py shell
python manager.py runserver
登录127.0.0.1:8000/相应路径查看网页。
{% if ... %}
do something
{% else %}
do something else
{% endif %}
{% for ... %}
do something
{% endfor %}
eg:
{% for author in authors %}
<div>
<h3>{{author.name}}</h3>
{% for book in author.book_set.all %}
<li>{{book}}</li>
<% endfor %>
</div>
<% endfor %>
from django.contrib import admin
from blog.models import User
admin.site.register(User) #注册User数据库
'views.py'
from django import forms
class UserForm(forms.Form):
name = forms.CharField()
#网页显示 Name:文本框
def register(req):
if req.method == 'POST':
form = UserForm(req.POST) #绑定(数据从网页中传过来)
if form.is_valid(): #验证
print form.cleaned_data #获取
return HttpResponse('ok')
else:
form = UserForm()
return render_to_response('register.html',{'form',form})
settings.py中,将MIDDLEWARE_CLASSES中的csrf注释掉,简化流程。
'views.py'
from django.shorcuts import render_to_response
from django.http import HttpResponse
from django import forms
class UserForm(forms.Form):
username = forms.CharField()
headImg = forms.FileField()
def regist(req):
if req.method == 'POST':
uf = UserForm(req.POST,req.FILES)
if uf.is_valid():
print uf.cleaned_data['username']
print uf.cleaned_data['headImg'].name
fp = file('/uploadfile/'+uf.cleaned_data['headImg'].name, 'wb') #打开,创建文件
s = uf.cleaned_data['headImg'].read() #读取上传的文件的内容到s
fp.write(s) #将s写入到我们创建的文件中
fp.close()
return HttpResponse('ok')
else:
'do something else'
<form method="post" enctype="multipart/form-data">
{{uf.as_p}}
<input type="submit" value="ok"/>
</form>
'models.py'
class User(models.Model):
username = models.CharField(mat_length = 30)
headImg = models.FileField(upload_to = './uploadfile/') #可到settings中修改MEDIA_ROOT设置根目录
def __unicode__(self):
return self.username
之后打开后台admin,同步数据库,blog下建立admin.py等。
上传的文件存放在'./uploadfile/'下,对应数据库会记录,管理员可通过后台管理。
from blog.models import User
...
if uf.is_valid():
user = User()
user.username = username
user.headImg = headImg
user.save()
会话记录存放在服务器,客户端的cookie已加密
关于会话部分只看了个大概,留待下回有空再总结吧~^.^