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>
posted @ 2019-05-21 13:12  learnacode  阅读(195)  评论(0编辑  收藏  举报