1. 程式人生 > >django學習筆記(四)

django學習筆記(四)

keys $.ajax pac ons include reverse cheng .get 基於

1、請求周期

url> 路由 > 函數或類 > 返回字符串或者模板語言?

Form表單提交:
提交 -> url > 函數或類中的方法
- ....
HttpResponse(‘....‘)
render(request,‘index.html‘)
redirect(‘/index/‘)
用戶 < < 返回字符串
(當接受到redirect時)自動發起另外一個請求
--> url .....

Ajax:
$.ajax({
url: ‘/index/‘,
data: {‘k‘: ‘v‘, ‘list‘: [1,2,3,4], ‘k3‘: JSON.stringfy({‘k1‘: ‘v‘}))}, $(form對象).serilize()
type: ‘POST‘,
dataType: ‘JSON‘:
traditional: true,
success:function(d){
location.reload() # 刷新
location.href = "某個地址" # 跳轉
}
})
提交 -> url -> 函數或類中的方法
HttpResponse(‘{}‘)
render(request, ‘index.html‘, {‘name‘: ‘v1‘})
<h1>{{ name }}</h1> -->
<h1>v1</h1>

XXXXXXX redirect...
用戶 <<<<< 字符串


2、路由系統URL
a. /index/ -> 函數或類
b. /index/(\d+) -> 函數或類
c. /index/(?P<nid>\d+) -> 函數或類
d. /index/(?P<nid>\d+) name=‘root‘ -> 函數或類
reverse()
{% url ‘root‘ 1%}
e. /crm/ include(‘app01.urls‘) -> 路由分發

f. 默認值
url(r‘^index/‘, views.index, {‘name‘: ‘root‘}),

def index(request,name):
print(name)
return HttpResponse(‘OK‘)

g. 命名空間

/admin/ include(‘app01.urls‘,namespace=‘m1‘)
/crm/ include(‘app01.urls‘,namespace=‘m1‘)

app01.urls
/index/ name = ‘n1‘


reverser(‘m1:n1‘)

3、
def func(request):
request.POST
request.GET
request.FILES
request.getlist
request.method
request.path_info

return render,HttpResponse,redirect

4、
render(request, ‘index.html‘)
# for
# if
# 索引. keys values items all

5、
class User(models.Model):
username = models.CharField(max_length=32)
email = models.EmailField()

有驗證功能
Django Admin
無驗證功能:
User.objects.create(username=‘root‘,email=‘asdfasdfasdfasdf‘)
User.objects.filter(id=1).update(email=‘666‘)



class UserType(models.Model):
name = models.CharField(max_length=32)


class User(models.Model):
username = models.CharField(max_length=32)
email = models.EmailField()
user_type = models.ForeignKey("UserType")

user_list = User.objects.all()
for obj user_list:
obj.username,obj.email,obj.user_type_id,obj.user_type.name,obj.user_type.id

user = User.objects.get(id=1)
user.

User.objects.all().values("username","user_type__name",)



class UserType(models.Model):
name = models.CharField(max_length=32)


class User(models.Model):
username = models.CharField(max_length=32)
email = models.EmailField()
user_type = models.ForeignKey("UserType")
m = models.ManyToMany(‘UserGroup‘)


class UserGroup(models.Model):
name = ....


obj = User.objects.get(id=1)
obj.m.add(2)
obj.m.add(2,3)
obj.m.add(*[1,2,3])

obj.m.remove(...)

obj.m.clear()


obj.m.set([1,2,3,4,5])

# 多個組,UserGroup對象
obj.m.all()
obj.m.filter(name=‘CTO‘)



知識點:
URL
- 兩個
Views
- 請求的其他信息
from django.core.handlers.wsgi import WSGIRequest
request.environ
request.environ[‘HTTP_USER_AGENT‘]
- 裝飾器
FBV:
def auth(func):
def inner(reqeust,*args,**kwargs):
v = reqeust.COOKIES.get(‘username111‘)
if not v:
return redirect(‘/login/‘)
return func(reqeust, *args,**kwargs)
return inner

CBV:
from django import views
from django.utils.decorators import method_decorator

@method_decorator(auth,name=‘dispatch‘)
class Order(views.View):

# @method_decorator(auth)
# def dispatch(self, request, *args, **kwargs):
# return super(Order,self).dispatch(request, *args, **kwargs)

# @method_decorator(auth) #使用CBV的時候需要把auth當做參數傳入django的裝飾器類裏面
def get(self,reqeust):
v = reqeust.COOKIES.get(‘username111‘)
return render(reqeust,‘index.html‘,{‘current_user‘: v})

def post(self,reqeust):
v = reqeust.COOKIES.get(‘username111‘)
return render(reqeust,‘index.html‘,{‘current_user‘: v})
Templates
- 母版...html
extends
include
- 自定義函數
simple_tag
a. app下創建templatetags目錄
b. 任意xxoo.py文件
c. 創建template對象 register
d.
@register.simple_tag
def func(a1,a2,a3....)
return "asdfasd"
e. settings中註冊APP
f. 頂部 {% load xxoo %}
g. {% 函數名 arg1 arg2 %}
缺點:
不能作為if條件
優點:
參數任意
filter
a. app下創建templatetags目錄
b. 任意xxoo.py文件
c. 創建template對象 register
d.
@register.filter
def func(a1,a2)
return "asdfasd"
e. settings中註冊APP
f. 頂部 {% load xxoo %}
g. {{ 參數1|函數名:"參數二,參數三" }} {{ 參數1|函數名:數字 }}
缺點:
最多兩個參數,不能加空格
優點:
能作為if條件

分頁(自定義的分頁)

XSS:
{{ page_str|safe }}

mark_safe(page_str)

cookie
客戶端瀏覽器上的一個文件
{"user": ‘dachengzi‘}

session :裝飾器


Models
- 一大波操作

Form驗證
-
緩存
中間件
信號
CSRF
Admin/ModelForm

作業:
主機管理:
1、單表操作
2、一對多
3、多對多
要求:
a. 刪除對話框
b. 修改,添加新URL
c. 基於cookie進行用戶認證
d. 定制顯示個數
e. 分頁
預習:
Form: http://www.cnblogs.com/wupeiqi/articles/6144178.html
Model:http://www.cnblogs.com/wupeiqi/articles/6216618.html


django學習筆記(四)