python&django 常见问题及解决方法

0.python-dev安装(ubuntu)

 apt-get install  python-dev 

1.Open(filename,mode)

报错实例: f = open('d:\Users\168935495Request.xml','r')

错误信息"SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes inposition 2-3: truncated \UXXXXXXXX escape"

解决方法: f = open(r'd:\Users\168935495Request.xml','r')

原因:文件名中的 \U 开始的字符被编译器认为是八进制

2.Module Path

python安装目录在C:\Python33,fibo.py文件在E:\Python。

报错实例:import fibo

错误信息“ImportError: No module named 'fibo'

解决方法:import sys

     sys.path.append('E:\Python')

      import fibo

原因:需要在sys中配置工作目录

2.5 不同目录导入模块

错误信息“ImportError: No module named 'fibo'”

解决方法:在目录下新建空文件__init__.py

3.Python2.7中文不识别

错误信息“SyntaxError: Non-ASCII character '\xc9'

解决方法:文件头#coding=gbk

4.mysqldb 模块安装(目前只支持python 2.7)

系统32位的从https://pypi.python.org/pypi/MySQL-python/1.2.4下然后直接安装

系统64位的从http://arquivos.victorjabur.com/python/modules/MySQL-python-1.2.3.win-amd64-py2.7.exe下然后直接安装

5.import MySQLdb 

错误信息:this is MySQLdb version (1,2,4,'beta',4),but _mysql is version(1,2,3,'final‘,0)

解决方法:删除\Lib\site-packages下所有的mysqldb,重新安装

6.格式化

整型数:%d 无符号整型数:%u 八进制:%o 十六进制:%x %X 浮点数:%f科学记数法
字符串: %s 如果没有什么特殊需求完全可以全部使用’%s‘来标记

7.with用法

with conn:
    conn.execute("insert into sometable values(?,?)",("foo","bar"))
在这个例子中,commit()是在所有with数据块中的语句执行完毕并且没有错误之后自动执行的,如果出现任何的异常,将执行rollback()操作,再次提示异常

8.文件每次修改后,需要重启服务

9.python连接MySQL连接串(注意编码)

python连接MySQL时加上编码参数 conn = MySQLdb.Connection(host='localhost', user='root',passwd='123', db='test',charset='utf8')

9.5Django配置MySql
DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql', #Mysql引擎
        'NAME':'meiwei',                     # 数据库名,不需要路径以及后缀的   
        'USER': 'root',#用户
        'PASSWORD': '',#密码
        'HOST':'',                     # Empty for localhost through domain sockets or '127.0.0.1' for localhostthrough TCP.
        'PORT':'',                     # Set to empty string for default.
    }
}

10.Django模板错误

错误信息:Requested setting TEMPLATE_DEBUG, but settings are not configured. Youmust either define

解决方法:from django.conf import settings  
     settings.configure()  

11.设置静态资源路径

settings.py

import os.path

TEMPLATE_DIRS = (
#静态模块文件存放路径
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)

使用处
from django.template.loader import get_template
 t = get_template('shoplist.html')

12.model设置表名和主键自增(django 默认的表是项目名+类名,主键是id)

from django.db import models

class Shop(models.Model):
        class Meta:
           db_table='shops'#指定表名,忽略django自动映射的表名(项目_class)
        ShopId  =models.AutoField(primary_key=True,db_column='sid')#指定列名

13.Templates模块

需要和model对象的属性一致(大小写敏感)

 14.Model中的__unicode__(self)

请确保你的每一个模型里都包含 __unicode__() 方法,这不只是为了交互时方便,也是因为 Django会在其他一些地方用 __unicode__() 来显示对象。

15.DateTimeField received a naive datetime (2013-08-19 18:44:32) whiletime zone support is active.
settings 修改 USE_TZ=False

参考:https://docs.djangoproject.com;http://www.djangobook.com

16.form自定义error,输出message

class ShopForm(forms.Form):

def clean(self):

cleaned_data=self.cleaned_data

data_shopname =cleaned_data.get('shopname')

if data_shopname is None:

raise forms.ValidationError(u'商户名不能空')

if len(data_shopname)>50:

raise forms.ValidationError(u'商户名长度不能超过50')

return cleaned_data

 

 

form =ShopForm(request.POST,error_class=ErrList)       

 

message=form.errors['__all__'].__unicode__()

             

16.5使用Form验证表单数据 (表单中的name名称必须和form类中的名称一致)

#form.py
class
ShopPicForm(forms.Form):

    shopname = forms.CharField(label="商户名",error_messages={"required":u"商户不可空"})

    picname =forms.CharField(label="图片名",help_text="长度范围2-20",max_length=20,min_length=2,error_messages={"required":u"图片名不可空","min_length":u"最小长度2","max_length":u"最大长度20"})

    picup =forms.ImageField(label="选择图片",error_messages={"required":u"图片不可空"})

#view.py     

 form = ShopPicForm(request.POST)

 if form.is_valid():     

     #do something

  else:

     return render(request,"picadd.html",{"f":form})

#template

图片名:<input type="text" name="picname" value="{{f.data.picname}}"/> {{f.errors.picname.as_text}}<br/>

商户名:<input type="text" name ="shopname"autocomplete="on" value="{{f.data.shopname}}"/>{{f.errors.shopname.as_text}}<br/>

16.9修改errors键的值:

#.py

from django.forms.util importErrorList

form.errors['username'] = ErrorList([u'帐号错误'])

#.html

{{form.errors.username.as_text}}

17.Template中使用cleaned_data

  在view.py中使用 form.cleaned_data['键名'],template中使用form.cleaned_data.键名

 18.加载动态下拉框(数据从数据库查询)

#form代码

 def __init__(self, *args,**kwargs):

        super(ShopForm, self).__init__(*args, **kwargs) 

        self.fields['cid'].choices= [('0','请选择')]+\

            [(c.cid,c.categoryname) for c in CategoryModel.objects.all()]

#另一种

CATEGORY_CHOICES = [('0','请选择')]+[(c.cid,c.categoryname) for c in CategoryModel.objects.all()]
cid = forms.ChoiceField(choices=CATEGORY_CHOICES)

#template代码

{{form.cid}}

#model代码

from django.db importmodels

class CategoryModel(models.Model):

    class Meta:

        db_table="categorys"

    cid  =models.AutoField(primary_key=True)

    categoryname =models.CharField(max_length=20)

    createtime =models.DateTimeField(auto_now_add = True)

    lastmodifytime =models.DateTimeField(auto_now = True)   

    def __unicode__(self):

        return u'%s' % (self.categoryname)

 19.下拉框设置选中

#view.py

form.fields['cid'].choices = [(1,1),(2,2),(3,3)]

form.fields['cid'].initial = [2]#选中第二个

 20.图片上传

#model

 url = models.ImageField(upload_to = "%Y/%m/%d",blank=True)#注意此处头部不要带/,否则会提示Attemptedaccess to '' denied.

#form

 url = forms.ImageField()

#view form =UploadFileForm(request.POST, request.FILES)必须要将request.FILES传给form的构造函数,才能将文件数据绑定到form.

 if 'picup' in request.FILES:

            image = request.FILES["picup"]

        else:

            image =None

        name = request.POST["picname"]

        s = ShopPicModle(name=name,url=image)

        s.save()

#template

<form action="/pic/create/" method="post" enctype="multipart/form-data">

            图片名:<input type="text" name="picname"/><br/>

       

            图片:<input type="file" name="picup" /><br/>

            <input type="submit" name="添加"/> {% csrf_token %}           

        </form>

 20.静态资源(图片)显示

#url配置

 url(r'^images/(?P<path>.*)$','django.views.static.serve', 

        {'document_root':"/path/to/your/images/"}),#/person/web/web/images/

#template

<img src='/images/{{s.url}}'width="100px"/>

DB中URL值:/shopspic/2013/08/29/ee244141a4874db7aeb034d3bd043306_550_412.jpg

图片在磁盘上的路径:person\web\web\images\shopspic\2013\08\29\ee244141a4874db7aeb034d3bd043306_550_412.jpg

21.生产环境关闭DEBUG,500的错误

DEBUG = False,只是这样会出现500的错误,需要在ALLOWED_HOSTS = ['域名'或'ip'或'*']。生产环境推荐使用域名

22.MD5加密

from hashlib import md5

md5('加密字符串').hexdigest()

23.Cookie设置

#设置cookie

response =render_to_response("login.html", {"message":message})

response.set_cookie(key,value="vv",path='/')

return response

 #获取cookie 
  cookie = request.COOKIES.get(key)

24.模板继承

 {%block%}告诉模板引擎。子模块可以重载这部分。

#base.html

<html>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <link type="text/css" rel="stylesheet" href="/static/css/base.css"/>

 

    <title>{%blocktitle %} {%endblock%}</title>

    <body>

        <h1>后台管理</h1>

        <p class="path">

            当前位置:{%block path%}{%endblock%}

            <span>欢迎你:{{admin}} <a href="#">注销</a></span>

        </p>

        {%block content%}{%endblock%}

    </body>

</html>

 

#piclist.html

{%extends"base.html"%}

{%block title %}图片列表页面{%endblock%}

{%block path%}图片列表{%endblock%}

{%block content%}

内容

{%endblock%}

25.自定义contextprocessor

a)修改settings

TEMPLATE_CONTEXT_PROCESSORS= (

'django.core.context_processors.request',

'django.contrib.auth.context_processors.auth',

'web.offline.cookie.logined', # 自定义的 context processors 函数,格式:项目.包.模块.方法               

)

b)logined方法

def logined(request):

    c =request.COOKIES.get(web.settings.COOKIENAME)

    if c:

        context = {'admin':c}

    else:

        context =  {'admin':"未登录"}

    return context #返回必须是字典

26.配置多个数据库

#settings.py

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'meishi',                     #  database   

        'USER': '',

        'PASSWORD': '',

        'HOST': '',                      # Empty for localhost through domain socketsor '127.0.0.1' for localhost through TCP.

        'PORT': '',                      # Set to empty string for default.

    },

   'backup': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'meishi2',               

        'USER': '',

        'PASSWORD': '',

        'HOST': ''

        'PORT': '',                      # Set to empty string for default.

    }

}

#view.py

Shop.objects.all().order_by('-ShopId')#默认使用的是default

 

Shop.objects.all().using('backup').order_by('-ShopId')#使用其他数据库

 27.Cookie设置后跳转Url(这个问题纠结了很久)

response =HttpResponseRedirect('/piclist/')#

response.set_cookie(web.settings.COOKIENAME,value=owner.name,path='/')

return response

 28.自定义404页面

#urls.py

handler404 = 'project.view.404'

#需要把settings.py中的DEBUG=False才会生效

 29.提交表单报错:RuntimeError: You called this URL viaPOST, 
      but the URL doesn’t end in a slash and you haveAPPEND_SLASH set.

将from的action地址改为/结尾的就可以了

或者

修改settings:APPEND_SLASH=False

30.Url配置name参数,

1

2

3

4

5

#urls.py

url(r'^$', 'wetrip.views.home.index', name='home'),

#template

<a href="{%url 'home'%}">首页</a>

以后url地址发生变化,只需要修改urls文件即可.

 31.文件操作(需要目录已存在)

#view.py 写文件

file_handle =open(file_path,'w+')

file_handle.write(data)#encode('utf8')

file_handle.close()

#读文件

file_handle =open(file_path)

data =file_handle.read() #decode('utf8')

file_handle.close()

 32.目录创建

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#多层创建目录函数os.makedirs(path)。当父目录不存在的时候os.mkdir(path)不会创建,os.makedirs(path)则会创建父目录。

def mkdir(path):

    # 引入模块

    import os

    # 去除首位空格

    path=path.strip()

    # 去除尾部 \ 符号

    path=path.rstrip("\\")

  

    # 判断路径是否存在

    # 存在     True

    # 不存在   False

    isExists=os.path.exists(path)

  

    # 判断结果

    if not isExists:

        # 如果不存在则创建目录

        print path+' 创建成功'

        # 创建目录操作函数

        os.makedirs(path)

        return True

    else:

        # 如果目录存在则不创建,并提示目录已存在

        print path+' 目录已存在'

        return False

 33.返回403

1. 在settings.py里面的MIDDLEWARE_CLASSES中加入django.middleware.csrf.CsrfResponseMiddleware

 

2. 在settings.py里面的MIDDLEWARE_CLASSES中去掉django.middleware.csrf.CsrfViewMiddleware

 34.返回Josn格式数据

#view.py

from django.utils importsimplejson

 

json={'ret':ret,'save_name':new_name}

#支持中文

returnHttpResponse(simplejson.dumps(json,ensure_ascii = False))

 35.html转义

#template

{% autoescape off%}

coding...

{% endautoescape%}

这里的off 参数表明被autoescape包含的信息都不需要执行HTML转义。on 参数表示需要执行HTML转义

 36.访问远程图片

import cStringIO, urllib2, Image

 

url = 'remote picture'

file =urllib2.urlopen(url)

tmpIm =cStringIO.StringIO(file.read())

im =Image.open(tmpIm)

 37.‘gbk' codec can't encode character 错误

#忽略特殊字符

str.encode('gbk','ignore')

 38.获取Post name相同的值(如多个checkbox)

#view.py

request.POST.getlist('name')

 39.创建Django(path到django目录下)

django-admin.py startproject mysite

40.中文输出

  u'中文'

41.模板注释

{# 文字#}注释的内容不会在模板渲染时输出。注释不能跨多行

42.密码框

password = forms.CharField(widget=forms.PasswordInput())

43.Template中{{ 变量}} 不要换行

44.'ascii' codec can't encode characters in position 0-4: ordinal not inrange(128)  python版本2.7

在model中增加

def __unicode__(self):
      return self.question_text

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python Django是一个基于Python语言的Web应用框架,能够帮助开发者快速构建高效、安全和可扩展的管理系统。 Python Django具有以下特点: 1. 简单易用:Django提供了许多内置的功能和工具,使得开发者可以使用简单的代码完成复杂的任务。它使用了Python语言的简洁和易读的语法,降低了学习和使用的门槛。 2. 高效性:Django具有比较高的性能,可以处理大量的并发请求。它的模型-视图-控制器(MVC)的设计模式可以有效地将业务逻辑和数据处理分离,提高系统的可维护性和可扩展性。 3. 安全性:Django内置了许多安全特性,可以帮助开发者有效地防止常见的Web攻击,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。此外,Django还提供了用户认证和权限管理的功能,保护敏感数据的安全性。 4. 可扩展性:Django使用了模块化的设计,提供了许多可重用的应用和插件,可以快速集成到现有的系统中。开发者可以根据自己的需求选择合适的模块和扩展,提高开发效率。 5. 社区支持:Django拥有庞大的开发者社区,提供了丰富的文档、教程和示例代码。开发者可以通过社区分享经验和解决问题,加快开发进程。 综上所述,Python Django是一个功能强大、易用、高效和安全的管理系统开发框架,能够帮助开发者快速构建具有良好用户体验和高度可定制性的管理系统。 ### 回答2: Python Django 是一个开发Web应用程序的高级框架,可以用于快速、高效地开发管理系统。 在 Python Django 管理系统中,我们可以使用 Django 框架中的模型、视图和模板来建立数据模型、业务逻辑和用户界面。通过模型,我们可以定义数据库中的表和字段,以及它们之间的关系。视图是处理用户请求和返回响应的逻辑处理部分,可以从模型中获取数据并通过模板渲染生成用户界面。模板是用户最终看到的页面的呈现方式,我们可以在模板中渲染动态内容,包括从数据库中获取的数据。通过使用 Django 自带的管理界面,我们可以方便地管理模型数据,包括创建、编辑、删除和查询。 使用 Python Django 管理系统的好处有很多。首先,Django 提供了丰富而强大的功能,例如自动化的URL路由、表单处理、用户认证和访问控制、缓存等。这些功能让开发者能够快速构建完整且安全的管理系统。其次,Django 遵循了MVC(模型-视图-控制器)的设计模式,使代码易于组织和维护。此外,Django 还拥有活跃的社区和丰富的第三方库,开发者可以轻松地找到解决方案和扩展功能。 总之,Python Django 管理系统是一个强大而灵活的工具,可以帮助开发者高效地构建管理系统。无论是小型的个人项目还是大规模的企业应用,它都能满足各种需求,并提供良好的开发体验。 ### 回答3: Python Django是一种常用的Web应用程序开发框架,用于快速搭建和管理网站。Django的管理系统提供了许多开箱即用的功能,使得开发人员可以轻松地创建和修改网站的后台管理界面。 使用Python Django开发管理系统可以带来许多好处。首先,Django提供了强大的数据库模型层,开发者可以使用简单的Python代码定义数据库表格和字段,然后Django会自动创建和管理数据库结构。这样的设计使得数据管理变得非常方便,开发人员只需要专注于业务逻辑的实现而不必担心数据库操作的细节。 其次,Django的管理系统具有丰富的内置功能,例如自动生成的数据列表、搜索、过滤和排序等功能。这些功能使得网站管理员可以直接在后台管理页面上对数据进行操作和管理,无需编写额外的代码。 此外,Django的管理系统还支持用户认证和权限控制。开发者可以根据不同的用户角色定义不同的权限,从而确保只有具有相应权限的用户才能进行敏感操作。这大大增强了网站的安全性和可靠性。 最后,Python Django的开源社区非常活跃,有许多开源的插件和扩展可供使用。这些插件可以帮助开发者进一步扩展和定制管理系统,满足不同网站的需求。 总而言之,Python Django的管理系统是一个强大且易用的工具,可以帮助开发人员快速搭建和管理网站的后台管理界面。无论是大型企业级应用还是小型个人项目,Django都是一个值得考虑的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值