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' '''
相关文章推荐
- algorithm@ dijkstra algorithm & prim algorithm
- OCdemo-07 CateGory 类目
- django入门(一)
- 借助 Django 的 smart_str 和 smart_unicode 进行编码转换(转)
- hdu 3966 Aragorn's Story 树链剖分
- google guava
- IDEA14中安装go语言插件
- Go学习笔记:xml库的使用
- 如果访问google
- POJ 1003 Hangover
- Golang中的接口与鸭子类型
- Golang的嵌入和继承
- Golang泛型函数
- Golang闭包
- google host
- Google 的GSON使用详解
- GoogleCardsActivity 效果很好
- 我理解的django的CSRF防御!
- mongo复制,备份,恢复
- golang reflect