zoukankan      html  css  js  c++  java
  • django--主要部分

    django URL

       URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调

      用这段代码,对于那个URL调用那段代码。

      在url.py中的只有一个元组,需要添加URL时只要卸载元组里面就成。

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^cur_time',views.current_time),
        url(r'^user_info',views.user_info),
        url(r'^article/(?P<year>[0-9]{4})/(?P<month>[0-9]      {2})/$',views.yeartest),
        url(r'^login$',views.login,name="denglu"),
        url(r'^home$',views.home)
    ]
    View Code 

      参数说明:

    • 一个正则表达式字符串
    • 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    • 可选的要传递给视图函数的默认参数(字典形式)
    • 一个可选的name参数

      需要注意的是:utl映射是有顺序的并且只会匹配一次

      url(r'^article/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.yeartest)

      1 其中?P是正则中分组并命名的关键字,外边又加上了括号,所以会传送给yeartest这个函数两个参数。

      2 url(r'^user_info',views.user_info,{"name":"alex"}), 相当于默认参数

      3 url(r'^user_info',views.user_info,name="alex") url 的别名 form中的action中用模板语言代替 为{% url alex %},这样做的目的是防止后端改变影响到前端。

      4 使用include:在文件的英语解释中写的很详细:

        1. Import the include() function: from django.conf.urls import url, include
        2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))

        之后再在自己的app中建立一个urls的py文件。其中内容一致不过,url再有blog开头的会顺位到另一个文件中匹配。

    Django Views

      通过例子看知识点:

    def login(request):
        if request.method=="POST":
            username = request.POST.get("username")
            pwd = request.POST.get("pwd")
            if username == "ccc"and pwd == "123":
                return redirect("/home")      # 返回一个home页面 执行home函数的
        return render(request,"login.html")   # 

      涉及到的知识点:

    •   render和Httpresponse要import过来。
    •   render内部也是通过Httpresponse传送渲染好HTML给浏览器。
    •   request是django自动传过来的参数必须要接收,可以是自定义。
    •   .menthod是表单发送的形式。大写post。
    •   post是一个字典,可以遍历。使用get方法更好。
    •   redirect是返回到这个URL(没用render),不是返回到这个函数或者HTML。若是返回到函数home或者直接homeHTML会导致home的一些数据没加载。并且页面还       是留在login页面,刷新后又得登录了。
    •   render后面的第一个参数必须是request,第二个是HTML,在后是参数。有时候为有local.()表示将所有的本地变量制成字典传送给HTML。涉及到模板语言。

      request中的其他属性:

    # path:       请求页面的全路径,不包括域名
    #
    # method:     请求中使用的HTTP方法的字符串表示。全大写表示。例如
    #
    #                    if  req.method=="GET":
    #
    #                              do_something()
    #
    #                    elseif req.method=="POST":
    #
    #                              do_something_else()
    #
    # GET:         包含所有HTTP GET参数的类字典对象
    #
    # POST:       包含所有HTTP POST参数的类字典对象
    #
    #              服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过
    #              HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用
    #              if req.POST来判断是否使用了HTTP POST 方法;应该使用  if req.method=="POST"
    #
    #
    #
    # COOKIES:     包含所有cookies的标准Python字典对象;keys和values都是字符串。
    #
    # FILES:      包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中                     name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
    #
    #             filename:      上传文件名,用字符串表示
    #             content_type:   上传文件的Content Type
    #             content:       上传文件的原始内容
    #
    #
    # user:       是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
    #              没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
    #              可以通过user的is_authenticated()方法来辨别用户是否登陆:
    #              if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
    #              时该属性才可用
    #
    # session:    唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
    
    #方法
    get_full_path(),   比如:http://127.0.0.1:8000/index33/?name=123 ,req.get_full_path()得到的结果就是/index33/?name=123
    req.path:/index33
    View Code

    Template基础

        尽管在视图中函数中可以直接returnHTML代码,但是出于效率,美观,分工,和维护等缘故一般讲写好的HTML页面以HTML后缀保存在template中。称为模板。

      模板的组成

        HTML代码和逻辑控制代码。

      模板语言

        前端网页要根据每个用户不同的信息产生不同的页面,所以尽管有js让页面动起来也需要从后端将数据传送到网页上。

        {{ name }}

    >>> python manange.py shell 
    >>> from django.template import Context, Template
    >>> t = Template('My name is {{ name }}.')
    >>> c = Context({'name': 'Stephane'})
    >>> t.render(c)
    'My name is Stephane.'

        上述代码是在manage shell命令中执行的渲染过程。这一过程搬运到HTML中就实现了页面数据的交换。这也是上节中render最后一个参数的传入的原因。

      万能的点(.)

        如果想其中传送的是以一个字典,那么可以通过点来检索这个字典。

    >>> from django.template import Template, Context
    >>> person = {'name': 'Sally', 'age': '43'}
    >>> t = Template('{{ person.name }} is {{ person.age }} years old.')
    >>> c = Context({'person': person})
    >>> t.render(c)
    'Sally is 43 years old.'

        同理,列表,元组,对象的属性,方法等都可以通过点来找到。

      变量的过滤器filter和 tag

          {{obj|filter:param}} 

        其他的方法:

      # 1  add          :   给变量加上相应的值
       #
       # 2  addslashes   :    给变量中的引号前加上斜线
       #
       # 3  capfirst     :    首字母大写
       #
       # 4  cut          :   从字符串中移除指定的字符
       #
       # 5  date         :   格式化日期字符串
       #
       # 6  default      :   如果值是False,就替换成设置的默认值,否则就是用本来的值
       #
       # 7  default_if_none:  如果值是None,就替换成设置的默认值,否则就使用本来的值

        {% tags %} 

        tag是标签的意思,与filter不同它中间是百分号。并且中间一般是特殊的语句。

        if语句 

     1 {% if num >= 100 and 8 %}
     2 
     3     {% if num > 200 %}
     4         <p>num大于200</p>
     5     {% else %}
     6         <p>num大于100小于200</p>
     7     {% endif %}
     8 
     9 {% elif num < 100%}
    10     <p>num小于100</p>
    11 
    12 {% else %}
    13     <p>num等于100</p>
    14 
    15 {% endif %}
    16 
    17 
    18 
    19 {% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
    20 {% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,例如下面的标签是不合法的:
    21 
    22 {% if obj1 and obj2 or obj3 %}
    if

        for语句  

     1 {% if num >= 100 and 8 %}
     2 
     3     {% if num > 200 %}
     4         <p>num大于200</p>
     5     {% else %}
     6         <p>num大于100小于200</p>
     7     {% endif %}
     8 
     9 {% elif num < 100%}
    10     <p>num小于100</p>
    11 
    12 {% else %}
    13     <p>num等于100</p>
    14 
    15 {% endif %}
    16 
    17 
    18 
    19 {% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
    20 {% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,例如下面的标签是不合法的:
    21 
    22 {% if obj1 and obj2 or obj3 %}
    for

        {%csrf_token%}:csrf_token标签

          这个标签会写在input后面,即form表单中最后。作用是防止跨站攻击验证,会随机生成一个复杂的字符串和表单的数据一起送过去。

          在使用render_to_response的时候没有作用。

        {% url %}

    <form action="{% url "bieming"%}" >
              <input type="text">
              <input type="submit"value="提交">
              {%csrf_token%}
    </form>
    

          在URL参数中提到,是配合name用的。

        {% with %}:用更简单的变量名替代复杂的变量名

    1
    {% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}

        {% verbatim %}: 禁止render

    1
    2
    3
    {% verbatim %}
             {{ hello }}
    {% endverbatim %}

        自定义的filter和tag(需要重启)

          1.在app中创建templatetags模板,名字不能变。

          2.创建自己的tag的py文件。文件内容:

     1 from django import template
     2 from django.utils.safestring import mark_safe
     3 
     4 register = template.Library()   #register的名字是固定的,不可改变
     5 
     6 
     7 @register.filter
     8 def filter_multi(v1,v2):
     9     return  v1 * v2
    10 
    11 
    12 @register.simple_tag
    13 def simple_tag_multi(v1,v2):
    14     return  v1 * v2
    15 
    16 
    17 @register.simple_tag
    18 def my_input(id,arg):
    19     result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    20     return mark_safe(result)
    View Code

          3.使用之前在HTML文件开头引入:{% load my_tags %}

          4.像其他filter和tag一样调用即可。需要注意的是filter是过滤器只能有两个参数。用法是在filter后面紧跟:和变量      

      extend继承

        在整个项目的实际运行中会有像标题等相同模块,不能每次用户点一次页面就让程序员再写一次。此时用到的就是extend继承标签。

        说白了,将多个页面大致内容一致时,将其中相同的那部分写到一个base.html钟,其他的页面用到这部分时继承过来用就行。

        所以在一些文件中出现了如下的语句:

    1 {% extends "base.html" %}
    2  
    3 {% block title %}The current time{% endblock %}
    4  
    5 {% block content %}
    6 <p>It is now {{ current_date }}.</p>
    7 {% endblock %}

        extend表示其他的内容继承来自base,但是在base中的block title中的信息要替换成为这个block中,同理 content。

      

  • 相关阅读:
    算法题目积累0721
    java编辑器
    java简易编辑器
    公选网站作业4_2.php
    php注册登录系统(一)-极简
    Tomcat与Web服务器、应用服务器的关系
    PHP用户登录与注册页面
    网站选修课作业(4.1)
    网站选修课作业(3.1)
    svn和ftp的区别
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/6097288.html
Copyright © 2011-2022 走看看