django錯誤參考

1. Python manager出現如下錯誤html

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

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

To fix the problem replace this (about line 56 in python\Lib\fuctools.py):git

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/sql


1. admin中文顯示:數據庫

----------------------------------------------------------------------------------------------
經確認是新版本的django包版本中只有zh_Hans目錄,沒有zh_CN,把zh_Hans目錄複製一個zh_CN就Ok了
一樓評論的方法也不錯,在settings裏面直接改爲zh-Hans,這樣就不用升級完Django,還去改目錄了。
-----------------------------------------------------------------------------------------------django


2. 查詢數據庫按每條記錄顯示數組

可經過如下命令顯示出來,再經過迭代器顯示
a.values('列') 顯露全部列的內容
a.values_list(列,列) 顯示全部列oracle


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']


2、經常使用字段
models.DateTimeField  日期類型 datetime
參數,
auto_now = True :則每次更新都會更新這個時間
auto_now_add 則只是第一次建立添加,以後的更新再也不改變。

 

 

 

 

models類型參考:
一、models.AutoField  自增列= int(11)
  若是沒有的話,默認會生成一個名稱爲 id 的列,若是要顯示的自定義一個自增列,必須將給列設置爲主鍵 primary_key=True。
二、models.CharField  字符串字段
  必須 max_length 參數
三、models.BooleanField  布爾類型=tinyint(1)
  不能爲空,Blank=True
四、models.ComaSeparatedIntegerField  用逗號分割的數字=varchar
  繼承CharField,因此必須 max_lenght 參數
五、models.DateField  日期類型 date
  對於參數,auto_now =True則每次更新都會更新這個時間;auto_now_add 則只是第一次建立添加,以後的更新再也不改變。
六、models.DateTimeField  日期類型 datetime
  同DateField的參數
七、models.Decimal  十進制小數類型= decimal
  必須指定整數位max_digits和小數位decimal_places
八、models.EmailField  字符串類型(正則表達式郵箱)=varchar
  對字符串進行正則表達式
九、models.FloatField  浮點類型= double
十、models.IntegerField  整形
十一、models.BigIntegerField  長整形
  integer_field_ranges ={
    'SmallIntegerField':(-32768,32767),
    'IntegerField':(-2147483648,2147483647),
    'BigIntegerField':(-9223372036854775808,9223372036854775807),
    'PositiveSmallIntegerField':(0,32767),
    'PositiveIntegerField':(0,2147483647),
  }
十二、models.IPAddressField  字符串類型(ip4正則表達式)
1三、models.GenericIPAddressField  字符串類型(ip4和ip6是可選的)
  參數protocol能夠是:both、ipv四、ipv6
  驗證時,會根據設置報錯
1四、models.NullBooleanField  容許爲空的布爾類型
1五、models.PositiveIntegerFiel  正Integer
1六、models.PositiveSmallIntegerField  正smallInteger
1七、models.SlugField  減號、下劃線、字母、數字
1八、models.SmallIntegerField  數字
  數據庫中的字段有:tinyint、smallint、int、bigint
1九、models.TextField  字符串=longtext
20、models.TimeField  時間 HH:MM[:ss[.uuuuuu]]
2一、models.URLField  字符串,地址正則表達式
2二、models.BinaryField  二進制
2三、models.ImageField圖片
2四、models.FilePathField文件


更多參數
一、null=True
  數據庫中字段是否能夠爲空
二、blank=True
  django的Admin中添加數據時是否可容許空值
三、primary_key =False
  主鍵,對AutoField設置主鍵後,就會代替原來的自增 id 列
四、auto_now 和 auto_now_add
  auto_now 自動建立---不管添加或修改,都是當前操做的時間
  auto_now_add 自動建立---永遠是建立時的時間
五、choices
GENDER_CHOICE =(
(u'M', u'Male'),
(u'F', u'Female'),
)
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
六、max_length
七、default  默認值
八、verbose_name  Admin中字段的顯示名稱
九、name|db_column  數據庫中的字段名稱
十、unique=True  不容許重複
十一、db_index =True  數據庫索引
十二、editable=True  在Admin裏是否可編輯
1三、error_messages=None  錯誤提示
1四、auto_created=False  自動建立
1五、help_text  在Admin中提示幫助信息
1六、validators=[]
1七、upload-to

 

表結構的修改
表結構修改後,原來表中已存在的數據,就會出現結構混亂,makemigrations更新表的時候就會出錯
解決方法:
一、新增長的字段,設置容許爲空。生成表的時候,以前數據新增長的字段就會爲空。
(null=True容許數據庫中爲空,blank=True容許admin後臺中爲空)
二、新增長的字段,設置一個默認值。生成表的時候,以前的數據新增長字段就會應用這個默認值


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

項目一:
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。

相關文章
相關標籤/搜索