您的位置:首页 > 编程语言 > Go语言

Django 学习笔记

2015-10-15 22:05 417 查看
'''

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'

'''
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: