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。

      

  • 相关阅读:
    delphi7在windows server 2003企业版上不能打开项目的选项(Options)窗口的解决方法
    简单的两个字“谢谢”,会让我坚持我的写作,我也要谢谢你们
    F41GUT 安装Windows server 2003系统后无法安装显卡驱动的解决办法
    远程桌面无法登录windows server 2003服务器
    F41GUT 安装Windows server 2003系统后无法安装显卡驱动的解决办法
    MS SQL Server 2000版在windows server 2003企业版系统上运行时造成数据库suspect的解决方法
    delphi7在windows server 2003企业版上不能打开项目的选项(Options)窗口的解决方法
    远程桌面无法登录windows server 2003服务器
    MS SQL Server 2000版在windows server 2003企业版系统上运行时造成数据库suspect的解决方法
    关于ajax 和josn
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/6097288.html
Copyright © 2011-2022 走看看