• django错误参考


    1. Python manager出现以下错误

    File "C:Python27libfunctools.py", line 56, in <lambda>
    '__lt__': [('__gt__', lambda self, other: other < self),
    File "C:Python27libfunctools.py", line 56, in <lambda>
    '__lt__': [('__gt__', lambda self, other: other < self),
    RuntimeError: maximum recursion depth exceeded while calling a Python object

    找到Python/lib/下的functools.py,将其中的

    To fix the problem replace this (about line 56 in pythonLibfuctools.py):

    convert = {
        '__lt__': [('__gt__', lambda self, other: other < self),
                   ('__le__', lambda self, other: not other < self),
                   ('__ge__', lambda self, other: not self < other)],
        '__le__': [('__ge__', lambda self, other: other <= self),
                   ('__lt__', lambda self, other: not other <= self),
                   ('__gt__', lambda self, other: not self <= other)],
        '__gt__': [('__lt__', lambda self, other: other > self),
                   ('__ge__', lambda self, other: not other > self),
                   ('__le__', lambda self, other: not self > other)],
        '__ge__': [('__le__', lambda self, other: other >= self),
                   ('__gt__', lambda self, other: not other >= self),
                   ('__lt__', lambda self, other: not self >= other)]
    }
    

    to that:

    convert = {
        '__lt__': [('__gt__', lambda self, other: not (self < other or self == other)),
                   ('__le__', lambda self, other: self < other or self == other),
                   ('__ge__', lambda self, other: not self < other)],
        '__le__': [('__ge__', lambda self, other: not self <= other or self == other),
                   ('__lt__', lambda self, other: self <= other and not self == other),
                   ('__gt__', lambda self, other: not self <= other)],
        '__gt__': [('__lt__', lambda self, other: not (self > other or self == other)),
                   ('__ge__', lambda self, other: self > other or self == other),
                   ('__le__', lambda self, other: not self > other)],
        '__ge__': [('__le__', lambda self, other: (not self >= other) or self == other),
                   ('__gt__', lambda self, other: self >= other and not self == other),
                   ('__lt__', lambda self, other: not self >= other)]
    }
    

    Read also: http://regebro.wordpress.com/2010/12/13/python-implementing-rich-comparison-the-correct-way/


    1. admin中文显示:

    ----------------------------------------------------------------------------------------------
    经确认是新版本的django包版本中只有zh_Hans目录,没有zh_CN,把zh_Hans目录复制一个zh_CN就Ok了
    一楼评论的方法也不错,在settings里面直接改成zh-Hans,这样就不用升级完Django,还去改目录了。
    -----------------------------------------------------------------------------------------------


    2. 查询数据库按每条记录显示

    可通过以下命令显示出来,再通过迭代器显示
    a.values('列') 显露所有列的内容
    a.values_list(列,列) 显示所有列


    3. 如果添加现在Model的字段
    正常情况下添加字段会出现错误python manager makimigrations
    可以在新字段设定允许为空即可,原记录会自动添加


    4. 时间显示
    可在时间Field中设定auto_now_add=True, auto_now=True,这样系统输入时不显示,自动更新,默认为False,显示,可手动更改


    5. admin:
    --------------------------------------------------------------------

    Admin放后台管理配置,所有的Model如果要在Django的Admin中显示,必须注册
    from .models import Mpls_Ping,Mpls_Form
    admin.site.register(Mpls_Ping,Ping_Admin)

    如果想在后台显示相关的字段,可建类如下,参数用admin.ModelAdmin
    class Ping_Admin(admin.ModelAdmin):
    list_display =['POP','PE','A_end','B_end']

    6. Model如果在负面中显示,需在model类中添加__str__方法
    def __str__(self):
    return self.POP


    7. From直接调用Model,可在Model中用以下方式:
    class Mpls_Form(ModelForm):
    class Meta:
    model = Mpls_Ping------这里就是Model类名称
    fields = ['POP','PE','A_end','B_end']



    8. 下拉框是一个二元数组
    选择下拉框:
    user_type = (
    (1,'user'),
    (2,'admin'),
    )
    user_t = models.IntegerField(choices=user_type,default=1,null=True)


    9. 如果错误的最后一行是
    django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3
    则可以试一下命令
    wget http://pysqlite.googlecode.com/files/pysqlite-2.6.3.tar.gz
    tar -xzf pysqlite-2.6.3.tar.gz
    cd pysqlite
    python setup.py build_static install

     


    10. 启用Mysql数据库:
    将setting 中的 DATABASES改成如下
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'dbname', (注意这个后缀名一定要写对) # Or path to database file if using sqlite3.
    'USER': 'root', # Not used with sqlite3.
    'PASSWORD': '', # Not used with sqlite3.
    'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '', # Set to empty string for default. Not used with sqlite3.
    }
    }

    然后在主目录同名下的__init__编辑如下:
    import mysqldb/import pymysql
    pymysql.install_mydqldb()

     

     

    11. CSRF验证失败. 相应中断.
    在Html的表单Form后面加:{% csrf_token %}

    同时在Views里:
    from django.template import RequestContext
    return render_to_response('search.html',{'f':f},context_instance=RequestContext(req))---加在最后

    不使用 CSRF 验证

    在 setting.py 文件中删除 'django.middleware.csrf.CsrfViewMiddleware', ,如下所示


    12. 模糊查询
    可通过以下方式
    a.objects.filter(user__contains='lo')

    filter(name="abc") # 等于filter(name__exact="abc") 名称严格等于 "abc" 的人
    filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
    filter(name__contains="abc") # 名称中包含 "abc"的人
    filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写
    filter(name__regex="^abc") # 正则表达式查询
    filter(name__iregex="^abc")# 正则表达式不区分大小写

    exclude(name__contains="WZ") # 排除包含 WZ 的Person对象
    filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的

    objects.all() 得到是一个django.db.models.query.QuerySet ,可迭代,可用Value列出所有值
    objects.filter() 得到是一个django.db.models.query.QuerySet ,可迭代,可用Value列出所有值
    也可通过a[0].字段名

    a = m.objects.get() 得到是一个django.db.models.query.QuerySet,不可迭代,可通过 a.字段方式获取值


    13. 可在Models中直接用ForginKey链接到User的用户库
    author = models.ForeignKey(User)

    14. 在显示页面上链接到实际的页面:
    在原Html页面上:
    <h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1>

    然后在urls:
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail)

    在建一个post_detail方法:
    from django.shortcuts import render, get_object_or_404
    def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'blog/post_detail.html', {'post': post})

    最后建一个显示的页面:
    {% extends 'blog/base.html' %}

    {% block content %}
    <div class="date">
    {% if post.published_date %}
    {{ post.published_date }}
    {% endif %}
    </div>
    <h1>{{ post.title }}</h1>
    <p>{{ post.text|linebreaks }}</p>
    <p>{{ post.mymail }}</p>
    {% endblock %}

    15. django ModelForm has no model class specified.
    从Model创建From,老是跳出django ModelForm has no model class specified.
    最后将以下form改为model就好了,搞了两天了
    原配置:
    class PostForm(forms.ModelForm):
    class Meta:
    form = Post
    fields = ['title','text']

    正确配置:
    class PostForm(forms.ModelForm):
    class Meta:
    model = Post
    fields = ['title','text']


    二、常用字段
    models.DateTimeField  日期类型 datetime
    参数,
    auto_now = True :则每次更新都会更新这个时间
    auto_now_add 则只是第一次创建添加,之后的更新不再改变。

     

     

     

     

    models类型参考:
    1、models.AutoField  自增列= int(11)
      如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
    2、models.CharField  字符串字段
      必须 max_length 参数
    3、models.BooleanField  布尔类型=tinyint(1)
      不能为空,Blank=True
    4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
      继承CharField,所以必须 max_lenght 参数
    5、models.DateField  日期类型 date
      对于参数,auto_now =True则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
    6、models.DateTimeField  日期类型 datetime
      同DateField的参数
    7、models.Decimal  十进制小数类型= decimal
      必须指定整数位max_digits和小数位decimal_places
    8、models.EmailField  字符串类型(正则表达式邮箱)=varchar
      对字符串进行正则表达式
    9、models.FloatField  浮点类型= double
    10、models.IntegerField  整形
    11、models.BigIntegerField  长整形
      integer_field_ranges ={
        'SmallIntegerField':(-32768,32767),
        'IntegerField':(-2147483648,2147483647),
        'BigIntegerField':(-9223372036854775808,9223372036854775807),
        'PositiveSmallIntegerField':(0,32767),
        'PositiveIntegerField':(0,2147483647),
      }
    12、models.IPAddressField  字符串类型(ip4正则表达式)
    13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
      参数protocol可以是:both、ipv4、ipv6
      验证时,会根据设置报错
    14、models.NullBooleanField  允许为空的布尔类型
    15、models.PositiveIntegerFiel  正Integer
    16、models.PositiveSmallIntegerField  正smallInteger
    17、models.SlugField  减号、下划线、字母、数字
    18、models.SmallIntegerField  数字
      数据库中的字段有:tinyint、smallint、int、bigint
    19、models.TextField  字符串=longtext
    20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
    21、models.URLField  字符串,地址正则表达式
    22、models.BinaryField  二进制
    23、models.ImageField图片
    24、models.FilePathField文件


    更多参数
    1、null=True
      数据库中字段是否可以为空
    2、blank=True
      django的Admin中添加数据时是否可允许空值
    3、primary_key =False
      主键,对AutoField设置主键后,就会代替原来的自增 id 列
    4、auto_now 和 auto_now_add
      auto_now 自动创建---无论添加或修改,都是当前操作的时间
      auto_now_add 自动创建---永远是创建时的时间
    5、choices
    GENDER_CHOICE =(
    (u'M', u'Male'),
    (u'F', u'Female'),
    )
    gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
    6、max_length
    7、default  默认值
    8、verbose_name  Admin中字段的显示名称
    9、name|db_column  数据库中的字段名称
    10、unique=True  不允许重复
    11、db_index =True  数据库索引
    12、editable=True  在Admin里是否可编辑
    13、error_messages=None  错误提示
    14、auto_created=False  自动创建
    15、help_text  在Admin中提示帮助信息
    16、validators=[]
    17、upload-to

     

    表结构的修改
    表结构修改后,原来表中已存在的数据,就会出现结构混乱,makemigrations更新表的时候就会出错
    解决方法:
    1、新增加的字段,设置允许为空。生成表的时候,之前数据新增加的字段就会为空。
    (null=True允许数据库中为空,blank=True允许admin后台中为空)
    2、新增加的字段,设置一个默认值。生成表的时候,之前的数据新增加字段就会应用这个默认值


    =========================================================================================================================

    项目一:
    1.创建一个模型,用于输入数据,在Admin里注册
    2.在Views里定义两个函数,一个用于显示所有数据,一个用于查询
    3.CSEF错误:在Form表单里加{% csrf_token %} ,在Views Return最后加context_instance=RequestContext(req)
    4.通过Filter或All得到的数据,可用Values_list方法得到列表,再进行迭代出来

     

     


    urls:
    --------------------------------------------------------
    from django.conf.urls import url
    from django.contrib import admin
    from app002 import views

    urlpatterns = [
    url(r'^search/', views.search),
    url(r'^index/', views.getIP),
    url(r'^admin/', admin.site.urls),
    ]


    views:
    --------------------------------------------------------
    from django.shortcuts import render,render_to_response
    from .models import MPLS_IP
    from django.template import RequestContext

    def getIP(req):
    ipinfo = MPLS_IP.objects.all().values_list()
    return render_to_response('index.html', {'ipinfo':ipinfo})

    def search(req):
    if req.method == 'POST':
    pe1 = req.POST['pe']
    f1 = MPLS_IP.objects.filter(PE=pe1)
    f= f1.values_list()
    else:
    f = ''
    return render_to_response('search.html',{'f':f},context_instance=RequestContext(req))

    models:
    --------------------------------------------------------
    from django.db import models

    # Create your models here.
    class MPLS_IP(models.Model):
    POP = models.CharField(u'站点',max_length=30)
    PE = models.CharField(u'接入PE',max_length=30)
    A_end = models.CharField(max_length=30)
    B_end = models.CharField(max_length=30)
    pub_date = models.DateTimeField(u'创建时间',auto_now_add=True)
    update_time = models.DateTimeField(u'修改时间',auto_now=True)

    def __str__(self):
    return self.POP

    index.html:
    --------------------------------------------------------
    <html>
    <title>my page test</title>
    <body>
    <div>
    <table >
    <tr>
    <td>ID</td>
    <td>POP</td>
    <td>PE</td>
    <td>A-end</td>
    <td>B-end</td>
    <td>创建时间</td>
    <td>修改时间</td>
    </tr>
    {% for i in ipinfo %}
    <tr>
    {% for j in i %}
    <td>{{j}}</td>
    {% endfor %}
    </tr>
    {% endfor %}
    </table>
    </div>
    </body>
    </html>

     

    search.html:
    --------------------------------------------------------
    <html>
    <title>my page test</title>
    <body>
    <form action='/search/' method="post">
    {% csrf_token %}
    <input type='text' name='pe'>
    <input type='submit' value='查询'>
    </form>
    <div>
    <table >
    <tr>
    <td>ID</td>
    <td>POP</td>
    <td>PE</td>
    <td>A-end</td>
    <td>B-end</td>
    <td>创建时间</td>
    <td>修改时间</td>
    </tr>
    {% for i in f %}
    <tr>
    {% for j in i %}
    <td>{{j}}</td>
    {% endfor %}
    </tr>
    {% endfor %}
    </table>
    </div>


    ===================================================================================================

     

    Django 模板标签

    if/else 标签
    基本语法格式如下:

    {% if condition %}
    ... display
    {% endif %}

    或者:

    {% if condition1 %}
    ... display 1
    {% elif condiiton2 %}
    ... display 2
    {% else %}
    ... display 3
    {% endif %}

    根据条件判断是否输出。if/else 支持嵌套。

    {% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),例如:

    {% if athlete_list and coach_list %}
    athletes 和 coaches 变量都是可用的。
    {% endif %}


    for 标签

    {% for %} 允许我们在一个序列上迭代。
    与Python的 for 语句的情形类似,循环语法是 for X in Y ,Y是要迭代的序列而X是在每一个特定的循环中使用的变量名称。
    每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。
    例如,给定一个运动员列表 athlete_list 变量,我们可以使用下面的代码来显示这个列表:

    <ul>
    {% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
    {% endfor %}
    </ul>

    给标签增加一个 reversed 使得该列表被反向迭代:

    {% for athlete in athlete_list reversed %}
    ...
    {% endfor %}

    可以嵌套使用 {% for %} 标签:

    {% for athlete in athlete_list %}
    <h1>{{ athlete.name }}</h1>
    <ul>
    {% for sport in athlete.sports_played %}
    <li>{{ sport }}</li>
    {% endfor %}
    </ul>
    {% endfor %}

    ifequal/ifnotequal 标签

    {% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。
    下面的例子比较两个模板变量 user 和 currentuser :

    {% ifequal user currentuser %}
    <h1>Welcome!</h1>
    {% endifequal %}

    和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:8

    {% ifequal section 'sitenews' %}
    <h1>Site News</h1>
    {% else %}
    <h1>No News Here</h1>
    {% endifequal %}

     


    注释标签
    -------------------------------------------------------------------------
    Django 注释使用 {# #}。
    {# 这是一个注释 #}
    过滤器
    模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:
    {{ name|lower }}
    {{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写。
    过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
    {{ my_list|first|upper }}
    以上实例将第一个元素并将其转化为大写。
    有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:
    {{ bio|truncatewords:"30" }}
    这个将显示变量 bio 的前30个词。
    其他过滤器:
    addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
    date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,实例:
    {{ pub_date|date:"F j, Y" }}
    length : 返回变量的长度。
    include 标签
    {% include %} 标签允许在模板中包含其它的模板的内容。
    下面这两个例子都包含了 nav.html 模板:
    {% include "nav.html" %}


    模板继承
    模板可以用继承的方式来实现复用。
    接下来我们先创建之前项目的 templates 目录中添加 base.html 文件,代码如下:
    <html>
    <head>
    <title>Hello World!</title>
    </head>

    <body>
    <h1>Hello World!</h1>
    {% block mainbody %}
    <p>original</p>
    {% endblock %}
    </body>
    </html>
    以上代码中,名为mainbody的block标签是可以被继承者们替换掉的部分。
    所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
    hello.html中继承base.html,并替换特定block,hello.html修改后的代码如下:
    {% extends "base.html" %}

    {% block mainbody %}
    <p>继承了 base.html 文件</p>
    {% endblock %}
    第一行代码说明hello.html继承了 base.html 文件。可以看到,这里相同名字的block标签用以替换base.html的相应block。

     

  • 相关阅读:
    jQuery使用经验建议
    java的各种类型转换汇总
    二路归并排序算法实现-完整C语言程序
    Java连接MYSQL 数据库的连接步骤
    二叉树
    bat命令批量创建文件夹
    【转】Android原生PDF功能实现
    【转】Android root检测方法总结
    【转】Android 破解视频App去除广告功能详解及解决办法总结
    【转】什么是微信62数据,62数据脚本有什么用?
  • 原文地址:https://www.cnblogs.com/syother/p/6773598.html
Copyright © 2020-2023  润新知