'''
url("^blog/index/$",'blog.view.index') blog.view.index --> view.index()
-------------------------
①
view.py
from django.http import HttpResponse
def index(req):
return HttpResponse('<h1>hello welcome to django</h1>')
---------------------------
python manage.py runserver
1. django install
2. django-admin startproject csv01
3. django-admin startapp blog
4. vim settings.py
app add---->blog,
5. vim urls.py
url(r"^blog/index/$",'blog.view.index')
6. vim blog/view.py
code ①
7. python manage.py runserver
urls.py URL配置 方式二
from blog.views inport index
url(r"^blog/index/$",'index')
方式三
urlpatterns = patterns('blog.view',
url("^blog/index/$",'index')
)
url 向 index函数传递参数
url(r"^blog/index/(?P<id>\d{2})$",'index')
localhost:8000/blog/index/12
def index(req,id):
in html {{id}}
mkdir blog/templates
templates 文件夹里面放置html文件 index.html
模板的创建 方式一
view.py
from django.template import loader,Context
def index(req):
t = loader.get_template('index.html')
c = Context({'uname':'arvon'}) 包装模板渲染所需要的数据
return HttpResponse(t.render(c))
这样将看到index.html
模板的创建 方式二
from django.shorcuts import render_to_response
def index(req):
return render_to_response('index.html'.{'uname':'arvon'}) 参数二相当于context
-------------------------------------------------------------
模板变量 模板当中可以使用字典,对象,对象的属性方法(要求无参数,有返回值),变量,列表等等
由{{}} 构成
例如 <title>{{title}} </title>
<h1>hello {{user.name}} </h1>
{{book_list}} #获取整个列表
{{book_list.0}} #获取第一项
{{user.say}}
in view.py
from django.shorcuts import render_to_response
class Person(object):
def __init__(self,name,age,sex):
self.name= name
self.age = age
self.sex = sex
def say(self):
return self.name
def index(req):
# user = {'name':'arvon','age':23,'sex':'male'}
user = Person('arvon',23,male)
book_list = ['python','java','php']
return render_to_response('index.html'.{'title':'my title','user':user,'book_list ':book_list })
-------------------------------------------------------------
标签
if 标签
{% if user%}
name : {{user.name}}
{% else%}
user is null!
{% endif %}
for 标签
{% for book in book_list %}
<li>{{book}}</li>
{% endfor %}
% for key,value in user.items %}
#forloop.counter 表明当前是第几项
<li>{{forloop.counter}}.{{key}}:{{value}}</li>
{% endfor %}
-------------------------------------------------------------
模板的使用
定义模型
service mysqld start
mysql uroot
rpm -qa | MySQL- python
python
import MySQLdb
'engine': 'django.db.backends.mysql'
'name':'db name'
'user':'root'
'password':''
'host':''
'port':''
in model.py
from django.db import models
class Employee(models.Model):
name = models.CharField(max_length=20) #string
def __unicode__(self):
return self.name
每张表都会自动增加一个自增长的id主键字段
python manage.py syncdb
>no
小结: 首先要有数据库-->在settings.py里面配置databases-->在model.py里创建模型-->同步python manage.py syncdb
-------------------------------------------------------------
模板数据操作
service mysqld start -->启动mysql in linux
from blog.models import Employee
add a record :
(方法1)
emp = Employee()
emp.name = 'arvon'
emp.save()
方法2
emp = Employee(name='tommiye')
emp.save()
方法3
Employee.objects.create(name='max') --> Employee object
query a record:
emps = Employee.objects.all();
emps[0].name
如果发现bug 可以试着重新启动server
-------------------------------------------------------------
多对一关系 Blog 多 --> Entry 一
in model.py
from django.db import models
class Entry(models.Model):
name = models.CharField(max_length = 20)
def __unicode__(self):
return self.name
class Blog(models.Model):
name = models.CharField(max_length = 30)
entry = models.ForeignKry(Entry)
def __unicode__(self):
return self.name
操作数据库 二 in shell
form blog.models import Entry, Blog
en1 = Entry.objects.create(name='arvon')
en2 = Entry.objects.create(name='tommiye')
en3 = Entry.objects.create(name='max')
blog1 = Blog.objects.create(name='algorithms',entry = en1)
query
blog.entry
blog.entry_id
en1.blog_set.all() 获得所有的blogs
-------------------------------------------------------------
admin
在setting中打开 django.contrib.admin
在url中打开 from django.contrib import admin, admin.autodiscover,url(r'^admin/',include(admin.site.urls),)
在models.py
from django.db import models
sex_choices = (
('f','female'),
('m','male'),
)
class User(models.Model):
name = models.CharField(max_length = 20)
sex = models.CharFiled(max_length=1,choices = sex_choices)
def __unicode__(self):
return self.name
python manage.py syncdb >Y
vim blog/admin.py
from django.contrib import admin
from blog.models import User
admin.site.register(User)
runserver
go to 127.0.0.1:8000/admin
sqlite3 xxx.db
.help
.table
select statement
-----------------------------
多对多数据模型
from django.db import models
class Author(models.Model):
name = models.CharField(max_length = 20)
def __unicode__(self):
return self.name
class Book(models.Model):
name = models.CharField(max_length = 30)
authors = models.ManyToManyField(Author)
def __unicode__(self):
return self.name
python manage.py syncdb >Y
in shell
from blog.models import Author , Book
Author.objects.create(name = 'arvon')
Author.objects.create(name = 'tommiye')
Author.objects.create(name = 'max')
authors = Author.objects.all()
b1 = Book()
b1.name = 'python'
b1.save()
arvon = Author.objects.get(name_exact='arvon')
b1.authors.add(arvon)
b1.authors.add(authors[1])
b1.authors.all()
b1.authors.remove(arvon)
b1.authors.all()
tommiye = Author.objects.filter(name_exact='tommiye')
books = Book.objects.all()
arvon.book_set.add(b1)
arvon.book_set.create(name = 'java')
arvon.book_set.all()
arvon.book_set.remove(books[0])
view.py
from blog.models import Author,Book
from django.shortcuts import render_to_response
def show_authors(req):
authors = Author.objects.all()
return render_to_response('show_authors.html',{'authors':authors})
def show_books(req):
books= Book.objects.all()
return render_to_response('show_books.html',{'books':books})
{%for author in authors%}
{{author.name}}
{%for book in author.book_set.all%}
{{book}}
{%endfor %}
{%endfor %}
---------------------------------------
{%for book in books%}
{{book.name}}
{%for author in book.authors.all%}
{{author}}
{%endfor %}
{%endfor %}
------------------------------------------
django表单 初步
sqlite3
name ='mydb'
url(r'blog/register/$','blog.view.register')
view.py
from django import forms
from django.http import HttpResponse
from django.shortcuts import render_to_response
class UserForm(forms.Form):
name = forms.CharField()
def register(req):
if req.mothod == 'POST': #表示表单进行提交
form = UserForm(req.POST) #表单对象绑定
if form.is_valid(): #如果提交的数据是有效的
print form.cleaned_data #数据放在cleaned_data字典里
return HttpResponse('ok') # 将写在html页面上
else: #表示现在访问的方法是GET
form = UserForm()
return render_to_response('register.html',{'form':form})
form--> Name:input text
-----------------------
register.html
<form method = 'post'>
{{form}} <input type='submit' value = 'ok'/>
</form>
csrf cross site request forgery 验证失败 : 解决: add a token
setting.py
middleware_classes 注释#django.middleware.csrf.csrfviewmiddleware
------------------------------------------
文件上传相关
sqlite3
url(r'^blog/regist/$','blog.view.regist')
view.py
from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponse
class UserForm(forms.Form):
username = forms.CharField() #charField -->TextInput 控件
headImg = forms.FileField() # UploadedFile
def regist(req):
if req.mothod == 'POST': #表示表单进行提交
uf = UserForm(req.POST,req.FILES) #表单对象绑定
if uf.is_valid(): #如果提交的数据是有效的
print uf.cleaned_data['username'] #数据放在cleaned_data字典里
print uf.cleaned_data['headImg'].name #--> xxx.jpg file.name
print uf.cleaned_data['headImg'].size
print req.FILES #--> {'headImg':uploadedfile}
fp = file('/upload'+uf.cleaned_data['headImg'].name,'wb') #mkdir uplod
s = uf.cleaned_data['headImg'].read()
fp.write(s) : fp.close()
return HttpResponse('ok') # 将写在html页面上
else: #表示现在访问的方法是GET
uf = UserForm()
return render_to_repsonse('regist.html',{'uf':uf})
regist.html
<form method = 'post' enctype = 'multipart/form-data'>
<div>用户注册</div>
{{uf.as_p}}
<input type='submit' value = 'ok'/>
</form>
BooleanField --> checkboxInput
ChoiceField -->
DateField --> datatime
这些都可以通过
FileField --> charactable
API OF HttpRequest and UploadFile
HttpRequest .GET .POST .REQUEST COOKIE .FILES
HttpRequest.FILES --> a dict-like object containing all file {name,UploadedFile}
enctype = 'multipart/form-data' #文件上传需要加上这个属性
UploadFile .name .size .chunks() .read()
in model.py
from django.db import models
class User(models.Model):
username = models.CharField(max_legth = 30)
headImg = models.FileField(upload_to='./upload')
def __unicode__(self):
return self.username
python manage.py syncdb
通过admin操作 --> 127.0.0.1:8000/admin
vim blog/admin.py Y
from django.contrib import admin
from blog.models import User
admin.site.register(User)
runserver 如果找不到USER --> clear cookies
upload path 的设定
如果设定 setting media_root='headImg' 新上传的文件就会存在 /headImg/upload 中
但是在数据库里保存的是文件的路径
---------------------------------------------------
文件上传综合
sqlite3
url(r'^/register/$','blog.view.register')
models,py
from django.db import models
class User(models.Model):
username = models.CharField(max_legth = 30)
headImg = models.FileField(upload_to='./upload')
def __unicode__(self):
return self.username
python manage.py syncdb
in view.py
from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponse
from blog.models import User
class UserForm(forms.Form):
username = forms.CharField() #charField -->TextInput 控件
headImg = forms.FileField() # UploadedFile
def register(req):
if req.mothod == 'POST':
uf = UserForm(req.POST,req.FILES)
if uf.is_valid():
username = uf.cleaned_data['username']
headImg = uf.cleaned_data['headImg'] #--><input name='headImg'/>
user = User()
user.username = username
user.headImg = headImg
user.save()
return HttpResponse('ok')
else:
uf = UserForm()
return render_to_repsonse('register.html',{'uf':uf})
register.html
<h1> test </h1>
<form method='post' enctype-'multipart/form-data'>
{{uf.as_p}}
<input type='submit' value = 'ok'/>
</form>
-------------------------------------------------
cookies
HttpRequest.COOKIES 保存于客户端
a stantard python dict containing all cookies, keys and values are strings
HttpResponse .set_cookie(key,value,max_age= ?s) .delete_cookie(key)
request.COOKIES.get(key)
保存会话状态,数据,以传递到其他页面
url(r'^regist/$','online.views.regist'),
url(r'^login/$','online.views.login'),
url(r'^index/$','online.views.index'),
url(r'^logout/$','online.views.logout'),
mkdir online/templates
models,py
from django.db import models
class User(models.Model):
username = models.CharField(max_legth = 20)
password = models.CharField(max_legth = 200)
#headImg = models.FileField(upload_to='./upload')
def __unicode__(self):
return self.username
views.py
from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from blog.models import User
class UserForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
headImg = forms.FileField() # UploadedFile
def regist(req):
if req.mothod == 'POST':
uf = UserForm(req.POST,req.FILES)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
user = User()
User.objects.create(username=username,password=password)
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_repsonse('regist.html',{'uf':uf})
def login(req):
if req.mothod == 'POST':
uf = UserForm(req.POST,req.FILES)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
user = User.objects.filter(username__exact=username,password__exact=password)
if user:
response = HttpResponseRedirect('/index/')
response.set_cookie('username',username,3600)
return response
else:
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_repsonse('login.html',{'uf':uf})
def index(req):
#username = req.COOKIES['username']
username = req.COOKIES.get('username','')
return render_to_repsonse('index.html',{'username':username})
def logout(req):
#del req 删除cookie的方式一
response = HttpResponse('logout')
response.delete_cookie('username')
return response
regist.html
<form method='post'>
{{uf.as_p}}
<input type='submit' value = 'ok'/>
</form>
login.html
<form method='post'>
{{uf.as_p}}
<input type='submit' value = 'ok'/>
</form>
index.html
<h1>welcome {{username}}</h1>
<a href='/logout/'>logout</a>
----------------------------------------------
session
a readable and writable dict-like
installed_app 'django.contrib.sessions'
middleware_classes 'django.contrib.sessions.middleware.SessionMiddleware'
python manage.py syncdb --auto create a table session
req.session['username'] = username
req.session.get('username','somebody')
del req.session['username']
-------------------------------------------------
用户管理 Auth 系统使用
sqlite3
installed_app 'django.contrib.auth' 'django.contrib.admin'
'''
Django 学习笔记
最新推荐文章于 2024-03-23 14:48:38 发布