Django 学习笔记

'''

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'














'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值