day56
金融公司的要求准备
交易员:985 211 研究生
it 人员: 本科
基金:基金从业证 只要想去考基金
聚宽 米筐 优矿 tushare 如果想玩 (可以写接口的逻辑,供用户使用)
量化:拿自己的策略,去拿以前的数据测量,自动化 如果可以,则可以使用的
金融:
分析师 数据师 也得写代码 有文档 所以学python的很多(tensorflow)很多的计算库非常成熟
接口
返回数据的函数: 数据接口
返回功能的函数:功能接口
url 返回数据 url称为接口
day56
1 今日内容
2 内置标签{%%}
.是路径
print(request.POST) 每次刷新的键值对 csrftoken (针对的是post)
防御跨站请求伪造
<QueryDict: {'csrfmiddlewaretoken': ['uESGhCIOdMK53m3Qun1qkfpahakjX9DzN8fGAA1vIdgIBoHkekmUgaPOPm3xZN6E']}>
<form action="" method="post">
{% csrf_token %} # 任意位置检测到了
{# 登陆login 返回给用户 发送post请求,通过你携带我的请求(键值对密钥)访问的 在页面上加这个可以通过认证 #}
{# 爬虫的话 携带自己的请求不对 forbidden了 (没有爬虫爬不了的网站)#}
{# 防御的是别人登陆的网页请求,而不是自己提交的写好的csrf标签。没有键值对 登陆不上 csrf在html里面不是py里面,通过其他数据来了,forbidden #}
{# 只有通过自己的登陆页面html 来提交数据,才可以登陆(因为提交的时候有csrf键值对)#} {# 随机字符串每次都刷新 #}
{#Django 的csrf可以识别自己的服务端发过来的键值对 别人的网站用户没法伪装 #}
<input type="text">
<input type="submit">提交
</form>
全局的认证 'django.middleware.csrf.CsrfViewMiddleware', .是路径 会把别的认证也会阻隔
放行csrf 认证
@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置csrfToken全局中间件。
@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
代码重用
Django 提供了功能,只要你写一个公用模板,后面的差不多的继承一下
组件和插件
组件: 都封装了里面js css 计算和逻辑分析
插件: 一个特定的功能 时间计算,任何都能用
划分不明显
for 循环
for 循环里没有break
{% for foo in l1 %}
{{ forloop.parentloop.counter }}
{#在内层循环的外层循环的计数 #}
<a href="">{{ foo }}</a>
{% endfor %}
从零开始数序号
{# <li>{{ forloop.counter0 }}{{ key }} ---- {{ value }}</li>#}
倒着数
{# <li>{{ forloop.revcounter }}{{ key }} ---- {{ value }}</li>#}第一条为true,不让用默认下拉框时的判断
<li>{{ forloop.first }}{{ forloop.revcounter }}{{ key }} ---- {{ value }}</li>
相当于else empty
{% empty %}
<h1>
对不起,你没有搜索到数据!
</h1>
{% endfor %}
变量过长
{% with total=business.employee.count %}
{{ total }}
{% endwith %}
<ol>
{% for key,value in name_dict.items %}
<li>{{ forloop.first }}{{ forloop.revcounter }}{{ key }} ---- {{ value }}</li>
</ol>
if 判断
if 判断 结合 过滤器的
{{ num|xxx:20}}
{% if num|xxx:20 > 2999 %} num|xxx:20 没有空格
<h2>大于2999</h2>
{% else %}
<h2>小于等于2999</h2>
{% endif %}
模板继承
1 创建一个模板.html文件
2 {% extends 'moban.html' %}
3 模板.html {%block content%} xxxxx(供替换) {%endblock (content)%}(指定或者不写名字)
4 继承模板的文件里面{%block content%} 自己html里面的内容{% endblock%}
5 保留模板的内容 {%block content%}{{block.super}} 自己html里面的内容{% endblock%}
home1.html 文件
css继承
{% block css %}
# 此处可以这样格式修改nav的css样式,但是不会提醒书写 也可以修改js样式,前后对应
.nav{
height: 60px;
background-color: orange;
}
{% endblock %}
{% block content %}
{{ block.super }}
{#保留继承 + 写自己的 ----添加一样了#}
{#继承一块 地可以改 起个名字可以写很多内容 替换模板里的页面 #}
我是home页面
{% endblock %}
组件
将一个完整功能模块,放到html中,使用这个模块的其他页面,直接页面中引入即可
引入方式{%include '模块.html'},任意位置引入
模板和组件的区别
模板是配合block使用,使用情景是很多相似的网页,继承模板,修改某一部分值,文字或者css或者js
调用方法 {% extends 'muban.html'%} 但是文件没法再添加框架css等
组件是给一个页面加一块功能,不能使用block模块,只是加载一部分公共的功能,不影响本html的书写
组件和插件的区别
组件是提供某一完整功能的模块,如:编辑器组件,QQ空间提供的关注组件 等。
而插件更倾向封闭某一功能方法的函数。
这两者的区别在 Javascript 里区别很小,组件这个名词用得不多,一般统称插件。
3 自定义标签和过滤器
内置的已经不能满足需求了
1 app应用文件中创建一个叫templatetags的文件夹
2 创建一个py文件,例如:mytag.py
3 mytag.py
from django import template
register = template.Library() # register 变量必须是这个名字
过滤器
@register.filter
def xxx():参数最多两个
return 'xx'
标签
@register.simple_tag
def sss(v1,v2,v3):
return 'xx'
@register.inclusion_tag('result.html')
def sss(v1,v2,v3): 参数可以多个
return {'data':data}
urls
![组件加载 函数传输](E:\Download\qq_download\teacher_huatu_download\s20py\front_end\新建文件夹\组件加载 函数传输.png)
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^base/', views.base),
# url(r'^baseee/', views.as_views),
url(r'^login/', views.login),
url(r'^home/', views.home),
url(r'^menu1/', views.menu1),
url(r'^menu2/', views.menu2),
url(r'^menu3/', views.menu3),
url(r'^menu11/', views.menu11),
url(r'^menu12/', views.menu12),
url(r'^menu13/', views.menu13),
url(r'^home1/', views.home1),
url(r'^title/', views.title),
url(r'^siderbar/', views.siderbar),
url(r'^tags/', views.tags),
]
mytags
#自定义 * 过滤器 和 自定义标签
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
#生成模板定制器 名字templatetags 和 register 必须这些
@register.filter
def xxx(v1,v2):
# def xxx(v1):
#最多两个参数
# v1 变量值
# v2 过滤器参数值
print(v1,v2)
return v1*v2
# return v2
# 自定义标签 标签的形式 {%%} 那个{{}}
@register.simple_tag
def sss(v1,v2,v3):
# 可以传多个参数
print( v1 - v2 -v3)
s = '<a href="https://www.baidu.com/">百度</a>'
# 只能这么配置 没法用safe老师说
# return v1 - v2 -v3
return mark_safe(s)
@register.inclusion_tag('result.html')
def aaa():
# 这里写参数 html调用写参数
data = [11,222,33]
return {'data':data}
# 这里必须与 html里的data 一致
# return 返回个了aaa的 文件
tags
{% load mytags %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>
{# {{ num|xxx:'11,22,22'}}#}
{{ num|xxx:20}}
{% if num|xxx:20 > 2999 %}
<h2>大于2999</h2>
{% else %}
<h2>小于等于2999</h2>
{% endif %}
</h1>
<h1>
{% sss num 10 14 %}
{# 给sss三个参数 #}
</h1>
<h1>
{% aaa %}
{# 去找aaa函数 然后在另一个html渲染,组件加载过来 #}
</h1>
<script>
</script>
</body>
</html>
home1 . html
{% extends 'moban.html' %}
{% block css %}
.nav{
height: 60px;
background-color: orange;
}
{% endblock %}
{% block menu1 %}
<li><a href="/menu11/">caidan1</a></li>
{% endblock %}
{# 或者 {% endblock menu1 %} 更清洗 #}
{% block content %}
{{ block.super }}
{#保留继承 + 写自己的 ----添加一样了#}
{#继承一块 地可以改 起个名字可以写很多内容 替换模板里的页面 #}
我是home页面
{% endblock %}
views
from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# Create your views here.
class MyData:
def __init__(self,name):
self.name=name
def age(self):
return '18'
# def age2(self,num):
# return '18'
def index(request):
# a = 20
# b = {'k1':'v1'}
# c = [11,22]
# m = MyData('一熊')
# l1 = [{'sex':'女'},22]
# s = 'XIAOHEI'
# # return render(request,'index.html',{'name':'chao','m':m,'b':b,'c':c,'a':a,'l1':l1})
# ss = 'B哥'
# num = 12345
# import datetime
# date = datetime.datetime.now()
#
# atag = "<a href='http://www.baidu.com'>百度</a>"
#
# sss = 'hello beautiful girl yue ma!'
#
# l2 = ['hello','girl']
#
# print(locals())
# return render(request,'index.html',locals())
return HttpResponse('<a href="xx">百度</a>')
def base(request):
l1 = [11,22,33]
name_list = ['聚宽' ,'米筐' ,'优矿' , 'tushare']
name_dict = {'a':'聚宽' ,'b':'米筐' ,'c':'优矿' , 'd': 'tushare'}
num= 100
return render(request,'base.html',{'name_list':name_list},{'name_dict':name_dict},{l1:'l1'},{num:'num'})
#{'name_dict':name_dict},
@csrf_exempt
# 放行csrf ,即便是配置了认证也不做验证
def login(request):
if request.method == 'GET':
return render(request,'login.html',)
else:
print(request.POST)
return HttpResponse('no')
def home(request):
return render(request, 'home.html', )
def menu1(request):
return render(request, 'menu1.html')
def menu2(request):
return render(request, 'menu2.html')
def menu3(request):
return render(request, 'menu3.html')
def menu11(request):
return render(request, 'menu11.html')
def menu12(request):
return render(request, 'menu12.html')
def menu13(request):
return render(request, 'menu13.html')
def home1(request):
return render(request, 'home1.html', )
def title(request):
return render(request, 'title.html', )
def siderbar(request):
return render(request, 'siderbar.html', )
def tags(request):
num = 100
return render(request, 'tags.html',{'num':num})
menu1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.nav{
height: 60px;
background-color: blueviolet;
{#color: black;#}
}
.left-menu{
background-color: blue;
}
.left-menu-1{
background-color: orange;
color: black;
}
.right-content{
display: inline-block;
height: 40px;
}
</style>
</head>
<body>
<div class="nav">
<a href="">百度</a>
<a href="">京东</a>
<a href="">20期</a>
<a href="">网易云</a>
</div>
<div class="left-menu">
<div class="left-menu-1">
<ul>
<li><a href="/menu1/">菜单一</a></li>
<li><a href="/menu2/">菜单二</a></li>
<li><a href="/menu3/">菜单三</a></li>
</ul>
</div>
<div class="right-content">
菜单一
</div>
</div>
<script>
</script>
</body>
</html>
menu11.html
{% extends 'moban.html' %}
{% block content %}
{#继承一块地可以改 起个名字可以写很多内容 替换模板里的页面 #}
我是菜单1页面
{% endblock %}
末班。html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
{#.nav{#}
{# height: 60px;#}
{# background-color: blueviolet;#}
{#color: black;#}
{# }#}
.left-menu{
background-color: blue;
}
.left-menu-1{
background-color: orange;
color: black;
}
.right-content{
display: inline-block;
height: 40px;
}
{% block css %}
.nav{
height: 60px;
background-color: blueviolet;
}
{% endblock %}
</style>
</head>
<body>
<div class="nav">
<a href="">百度</a>
<a href="">京东</a>
<a href="">20期</a>
<a href="">网易云</a>
</div>
<div class="left-menu">
<div class="left-menu-1">
<ul>
{% block menu1 %}
<li><a href="/menu11/">菜单一</a></li>
{% endblock %}
<li><a href="/menu12/">菜单二</a></li>
<li><a href="/menu13/">菜单三</a></li>
</ul>
</div>
<div class="right-content">
{# 标签写的时候不要忘了end#}
{% block content %}
末班页面
{% endblock %}
</div>
</div>
{#还可以block js块#}
<script>
</script>
</body>
</html>