• python django day18


    基本配置

    一、创建Django程序

    创建project终端命令:

    project:
    		django-admin startproject mysite
    		cd mysite
    		python manage.py startapp app01
    

     

    1、路由系统

    普通关系:
            /index/ ->函数
            ...
            #其他框架有 反射:
                /(w+)/(w+)
                /home/index/
                =>导入:home模块,getattr(index) fun()
                
        动态关系:
            /index/(w+)    -> 函数(参数)
        路由分发:
        /index/ -> app.url文件[/index/(w+)    -> 函数(参数,]

    每个路由规则对应一个view中的函数

    url(r'^detail/(d+)/', views.detail),
    url(r'^detail2/(d+)/(d+)/', views.detail2),
    url(r'^detail3/(?P<p1>d+)/(?P<x2>d+)/', views.detail3),
    

     根据app对路由规则进行一次分类

    url(r'^web/',include('app01.urls')),
    

    2、模版

    2、模版
    
        a. 模版渲染的过程
        
        b. {{ k1 }} --> 索引是.
        
        c.  {% for item in k2 %}
                <p>{{ item }},{{ forloop.counter }},{{ forloop.counter0 }},{{ forloop.first }},{{ forloop.last }},{{ forloop.revcounter }}</p>
            {% endfor %}
    
        d. 模版语言的内置方法
        
        e. 自定义方法
            filter
            simple_tag
            
            1、创建指定文件,名称不能改 templatetags
            2、创建任意 .py 文件,如:xx.py
                
                from django import template
                from django.utils.safestring import mark_safe
                from django.template.base import resolve_variable, Node, TemplateSyntaxError
                # 必须不变
                register = template.Library()
                
                # 创建函数
                @register.filter
                def f1(value):
                    return value + "666"
            3、在html模版的头部执行
            
                {% load xx %}
            
            4、
                k1 = 'VVV'
                {{k1}}    => vvv
                {{k1|f1}} => vvv666
            
            5、 settings.py 中注册app
            
            总结:
                filter
                    限制:传参
                    支持:模版语言的 if 条件
                simple_tag
                    不支持:模版语言的 if 条件
        
        f. 模版的继承
            母板: 
                    
                    balabala...
                    
                    {% block 名称 %} {% endblock %}
                    
                    balabala...
                    
            
            子板: 
                    {% extends '母板html文件名' %}
                    
                    
                    {% block 名称 %} 
                    
                        具体子页面的内容...
                        
                    {% endblock %}
        
        g. include
        
            小组件: x.html
            
            {% include 'x.html' %}
    View Code

     模板语言基本操作

    views.py

    def template(request):
        return render(request,
                      'template.html',
                      {'k1':'VVV','k2':[11,22,33,],'k3':{'nid':12,'name':'alex'}})
    

     template.html

        {{ k1 }}
        {{ k2.1 }}       //取列表中的第二个,索引用.
        {{ k3.name }}
    

     for循环中使用的

        {% for item in k2 %}
            <p>{{ item }},{{ forloop.counter }},{{ forloop.counter0 }},{{ forloop.first }},{{ forloop.last }}</p>
        {% endfor%}
    //结果
    11,1,0,True,False
    
    22,2,1,False,False
    
    33,3,2,False,True
    

    if

    {% if k1 == 'v1' %}
            <h1>V1</h1>
    {% elif k1 == 'v2' %}
            <h1>777</h1>
    {% endif %}
    

    3、自定义simple_tag

    a、在app中创建templatetags模块

    b、创建任意 .py 文件,如:xx.py

    #先导入
    from django import template
    from django.utils.safestring import mark_safe
    from django.template.base import resolve_variable, Node, TemplateSyntaxError
    # register这个名称必须不能变
    register = template.Library()
    
    # 创建函数
    @register.filter
    def f1(value):
        return value + "666"
    

    3、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名

    {% load xx %}
    

    xx.py

    from django import template
    
    register = template.Library()
    
    @register.filter
    def f3(value):
        return value + "666"

    使用filter

    {% if k1|f3 %}  //把k1传给自定义的f3
            <h1>True</h1>
    {% else %}
            <h1>False</h1>
    {% endif %}

    传两个参数(最多只能传两个参数)

    @register.filter
    def f3(value,arg):
        return value + "666" + arg

    使用filter

    {{ k1|f3:"QL" }}

    xx.py

    @register.simple_tag
    def f1(s1,s2,s3,s4):
        return s1 + s2 + s3 + s4

    使用simple_tag

     {% f1 1 2 3 4 %} //1代表第一个参数,2代表第二个参数、、、

    4、

     k1 = 'VVV' {{k1}} => vvv {{k1|f1}} => vv

    5、在settings中配置当前app,不然django无法找到自定义的simple_tag 

    总结:

    filter

      限制:传参

      支持:模版语言的 if 条件

    simple_tag

      不支持:模版语言的 if 条件

    模版的继承

    母板:

    {% block 名称 %} {% endblock %}
    

     子板:

    {% extends '母板html文件名' %}
    				
    				
    {% block 名称 %} 
    				
    具体子页面的内容...
    
    {% endblock %}
    
    include
    	
    		小组件: x.html
    		
    		{% include 'x.html' %}
    

     ajax(http://www.cnblogs.com/wupeiqi/articles/5703697.html)

    success 是回调函数

    function SubmitForm() {
                $.ajax({
                    url:'/web/ajax_demo/',
                    type:'POST',
                    data:{'user':$('#username').val(),'pwd':$('#pwd').val()},
                    dataType:'json',
                    success:function (data) {
                        if(data.status){
                            location.href = "http://www.baidu.com";
                        }else{
                            alert(data.message);
                        }
                    }
                });
            }
    
        Ajax:
            1、XMLHttpRequest对象(原生Ajax)
            2、jQuery - XMLHttpRequest对象(jQuery ajax)
            3、跨域Ajax
                浏览器同源策略:
                    Ajax,只能给自己的域名发请求
                    跨域名,浏览器做拦截

    model,ORM(http://www.cnblogs.com/wupeiqi/articles/5246483.html)

    1、创建(CURD)数据库表

        class -> DB,表

        DB,表 -> 类

    a. app.models.py写类

    from django.db import models
      
      class userinfo(models.Model):
        name = models.CharField(max_length=30) # string
        email = models.EmailField()            # string,帮助admin做输入验证,modelform
        memo = models.TextField()              # text
    		
    
    b. python manage.py makemigrations
        python manage.py migrate
    	
        python manage.py createsuperuser
    
  • 相关阅读:
    Alink漫谈(五) : 迭代计算和Superstep
    Alink漫谈(四) : 模型的来龙去脉
    Elasticsearch索引模板-转载
    Filebeat配置文件解析-转载
    Logtash 配置文件解析-转载
    Logtash遇到的异常和注意点
    Linux中Sshd服务配置文件优化版本(/etc/ssh/sshd_config)
    运维应急方案撰写-草稿版分享
    du和df的统计结果为什么会不一样?
    全网最详细的Linux命令系列-Screen远程会话命令
  • 原文地址:https://www.cnblogs.com/QL8533/p/5850472.html
Copyright © 2020-2023  润新知