day55

昨日内容回顾

路由系统
无名分组
有名分组
默认参数
额外参数
路由分发
项目的路由urls.py里面
app01,app02
1 导入include
2 app文件夹中创建每个app的urls.py文件
3 url(r'^app01/',include('app01.urls'))
   url(r'^$',views.home), 匹配首页

今日内容

视图      (类?)

CBV 和 FBV
		class base views  func base views 
		# 重写方法
		
CBV:
from django.views import View
继承类
class LoginView(View):
            def dispatch(self,request,*args,**kwargs):
                ret = super().dispatch(request,*args,**kwargs)
                return ret 	#别忘了return值
            		# 重写方法,前后加些内容
            def get(self,request):
			
            	return render(request,'login.html') 
			
			def post(self,request):
				print(request.POST)
				uname = request.POST.get('username')
				pwd = request.POST.get('pwd')
				if uname == 'yang' and pwd =='123':
					return  HttpResponse('用户名或密码错误')

request  请求对象 

response  响应对象 


urls.py
	url(r'^login/',views.LoginView.as_view()),
	1 as_view() - view()
	2 用户请求到了 view
	3 view里面执行了dispatch , 反射找到请求方法对应的自己视图的方法

FBV装饰器

def xxx(func1):
	def inner(request,*args,**kwargs):
		print('xx1')
		ret = func1(request,*args,**kwargs)
		print('xxx2')
		return ret 
	return inner

@xxx
def index(request):pass

CBV

from django.utils.decorators import method_decorator

方式3 : (name = "字符串"一种)
@method_decorator(xxx , name='get')
class IndexView(View):
	方式 1 :(它可以分发给其他函数)
	@method_decorator(xxx)
	def dispatch(...):...

	方式2 :(直接给)
	@method_decorator(xxx)
	def get(self,request):pass

request 请求对象
request.body : 得到用户提交数据的原始数据类型 b'username= chao& password =123'
request.GET			#<QueryDict: {}>
request.POST		#<QueryDict: {}>
request.method	获取请求方法  获得的方法大写的		#GET
request.path_info	获取用户请求路径(不带参数)	#/index/
request.get_full_path()   获取除域名之外的全路径,包括请求参数(查询参数query_params)
									#/index/?username=chao 
request.META  获取请求头的元信息 
			.META.get('HTTP_USER_AGENT')) #META请求头元信息
			.META.get('REMOTE_ADDR'))  #客户端IP地址


HTTPResponse('ok')  自动给你加到了body 正常情况不允许的  给整个html文件就渲染成页面了
HTTPResponse(' "<a href='http://www.baidu.com'>百度</a>"')  超链接 浏览器做的
正常为了怕修改  代码  只是文字显示 在评论处

三个方法
HTTPResponse('xxx')
render(request,'index.html',{'name','chao'} )  index.html {{name}}--chao
redirect('/login/')  ---给浏览器发送了一个重定向请求,浏览器拿到你要重定向的url,然后自动发送一个ip+端口+路径/login/,的一个请求,后端在配置对应的url('^login/',views.login)
			浏览器 发送一个请求给py服务端  服务端重定向redirect发过去  浏览器识别//和302 拼接请求发过来,然后服务端接收,发给浏览器内容

万能的句点号 .
name.xx.xxx li.0  d1.key    不能传参

py locals()
模板语言
{{变量}} {{%逻辑%}}


内置的过滤器
{{变量|过滤器名称:‘过滤其需要的参数’}}


length
filesizeformat
safe	:标签字符串,识别成文本,防xss共计		用户提交的数据,塞到了html页面上
date   	 时间对象|date:'Y-m-d H-i-s'
cut      移除某些内容
truncatechars	字符
truncatewords	单词间隔空格
slice 	
default    默认值
lower  upper 

标签

源码

谁调用是谁的类:
	 def as_view(cls, **initkwargs):
	 cls
def as_view(cls, ....)
cls = ()

调用的类
def view(request, *args, **kwargs):
 self = cls(**initkwargs)
 if hasattr(self, 'get') and not hasattr(self, 'head'):
dispath (分发前后干事情)
	handler = get(self.  ..)
	
	return handler()   =  get()  = render() 
	
return redirect('/login/')  # 重定向  写个相对路径,跳到url
			      super(HttpResponse, self).__init__(*args, **kwargs)
			      	
 # return render(request,'index.html')
    			
最终返回都是 通过HttpResponse  返回一个字符串
 

模板渲染

原文地址:https://www.cnblogs.com/Doner/p/10893583.html