Django 运行开发服务器时报错是怎么回事

Django 运行开发服务器时报错是怎么回事,第1张

原因如下:

1、因代码中的中文注释问题的报错

django项目的py文件文件中加入了中文注释,经常会因此报错而导致无法运行,究其原因是编码的问题,最后的解决办法是直接在有中文注释的py文件的顶部加上:# --coding:utf-8 --

2、运行过程中的中文乱码的报错

(1)首先确保连接的数据库的基础设置是utf-8。

(2)然后确认django项目中的网页头部设置编码为utf-8,网页头部加上代码:<meta charset="utf-8">。

(3)最后仍然报错就是因为django项目中我们没有指明编码方式,所以按照默认设置来,而非正常的utf-8。

(4)所以项目最后需要在进行编码 *** 作的地方,或者直接在settingspy中加入:import sys reload(sys) syssetdefaultencoding('utf-8')。

3、项目配置在debian系统中,FileField字段在admin中因中文文件名上传报错,解决如下:

(1)终端中 *** 作安装locales

(2)重新选择字符编码

(3)空格选择所有zh_开头的字符编码,OK确认下一步,选择中文UTF-8。

(4)debian里需要在~/bashrc里面最下面加入export LC_ALL=zh_CNUTF-8或者直接运行exportUTF-8。

(5)最后直接reboot重启服务器,查看系统编码,UTF-8中文生效,locale命令可以直接查看系统编码设置,此时再运行django项目上传中文名文件无误。

用ASP编写网站应用程序时间长了,难免会遇到各式各样的问题,其中关于如何上传文件到服务器恐怕是遇见最多的问题了,尤其是上传,比如你想要在自己的社区里面实现类似网易虚拟社区提供的“每日一星”的功能,就要提供给网友上传照片的功能。上传文件到服务器可以使用各种免费的文件上传组件,使用起来功能虽然很强大,但是由于很多情况下,我们只能使用免费的支持ASP的空间或者租用别人的虚拟空间,对于第一种情况,我们根本就没有可能来使用文件上传组件;至于第二种情况,我们也要付出不少的“银子”才可以。除非你拥有自己的虚拟主机,你就可以随便的在服务器上面安装自己所需要的组件,这种情况对于大多数人来说是可望而不可及的。那我们就没有办法了吗?呵呵,答案是肯定的(当然是肯定的了,要不然我也没法写出这篇文章啊)。下面就让我们一起来使用纯ASP代码来实现的上传以及保存到数据库的功能(顺便也实现显示数据库中的到网页上的功能)。

首先我们先来熟悉一下将要使用的对象方法。我们用来获取上一个页面传递过来的数据一般是使用Request对象。同样的,我们也可以使用Request对象来获取上传上来的文件数据,使用的方法是RequestBinaryRead()。而我们要从数据库中读出来的数据显示到网页上面要用到的方法是:

RequestBinaryWrite()。在我们得到了的数据,要保存到数据库中的时候,不可以直接使用Insert语句对数据库进行 *** 作,而是要使用ADO的AppendChunk方法,同样的,读出数据库中的数据,要使用GetChunk方法。各个方法的具体语法如下:

RequestBinaryRead语法:

variant=RequestBinaryRead(count)

参数

variant

返回值保存着从客户端读取到数据。

count

指明要从客户端读取的数据量大小,这个值小于或者等于使用方法RequestTotalBytes得到的数据量。

RequestBinaryWrite语法:

RequestBinaryWritedata

参数

data

要写入到客户端浏览器中的数据包。

RequestTotalBytes语法:

variant=RequestTotalBytes

参数

variant

返回从客户端读取到数据量的字节数。

AppendChunk语法

将数据追加到大型文本、二进制数据Field或Parameter对象。

objectAppendChunkData

参数

objectField或Parameter对象

Data变体型,包含追加到对象中的数据。

说明

使用Field或Parameter对象的AppendChunk方法可将长二进制或字符数

据填写到对象中。在系统内存有限的情况下,可以使用AppendChunk方法对长整型值进行部分而非全部的 *** 作。

GetChunk语法

返回大型文本或二进制数据Field对象的全部或部分内容。

variable=fieldGetChunk(Size)

返回值

返回变体型。

参数

Size长整型表达式,等于所要检索的字节或字符数。

说明

使用Field对象的GetChunk方法检索其部分或全部长二进制或字符数据。在系统内存有限的情况下,可使用GetChunk方法处理部分而非全部的长整型值。

GetChunk调用返回的数据将赋给“变量”。如果Size大于剩余的数据,则

GetChunk仅返回剩余的数据而无需用空白填充“变量”。如果字段为空,则

GetChunk方法返回Null。

每个后续的GetChunk调用将检索从前一次GetChunk调用停止处开始的数据。但是,如果从一个字段检索数据然后在当前记录中设置或读取另一个字段的值,ADO将认为已从第一个字段中检索出数据。如果在第一个字段上再次调用GetChunk方法,ADO将把调用解释为新的GetChunk *** 作并从记录的起始处开始读取。如果其他Recordset对象不是首个Recordset对象的副本,则访问其中的字段不会破坏GetChunk *** 作。

如果Field对象的Attributes属性中的adFldLong位设置为True,则可以对该字段使用GetChunk方法。

如果在Field对象上使用Getchunk方法时没有当前记录,将产生错误3021(无当前记录)。

接下来,我们就要来设计我们的数据库了,作为测试我们的数据库结构如下(access2000):

字段名称 类型 描述

id 自动编号 主键值

img OLE对象 用来保存数据

对于在MSSQLServer7中,对应的结构如下:

字段名称 类型 描述

id int(Identity) 主键值

img image 用来保存数据

现在开始正式编写我们的纯ASP代码上传部分了,首先,我们有一个提供给用户的上传界面,可以让用户选择要上传的。代码如下

(uploadhtm):

<html>

<body>

<center>

<form name="mainForm" enctype="multipart/form-data" action="processasp" method=post>

<inputtype=filename=mefile><br>

<inputtype=submitname=okvalue="OK">

</form>

</center>

</body>

</html>

注意enctype="multipart/form-data",一定要在Form中有这个属性,否则,将无法得到上传上来的数据。接下来,我们要在processasp中对从浏览器中获取的数据进行必要的处理,因为我们在processasp中获取到的数据不仅仅包含了我们想要的上传上来的的数据,也包含了其他的无用的信息,我们需要剔除冗余数据,并将处理过的数据保存到数据库中,这里我们以access2000为例。具体代码如下(processasp):

<%

responsebuffer=true

formsize=requesttotalbytes

formdata=requestbinaryread(formsize)

bncrlf=chrB(13)&chrB(10)

divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)

datastart=instrb(formdata,bncrlf&bncrlf)+4

dataend=instrb(datastart+1,formdata,divider)-datastart

mydata=midb(formdata,datastart,dataend)

setconnGraph=serverCreateObject("ADODBconnection")

connGraphConnectionString="driver={MicrosoftAccessDriver(mdb)};DBQ="&serverMapPath("imagesmdb")&";uid=;PWD=;"

connGraphOpen

setrec=servercreateobject("ADODBrecordset")

recOpen"SELECTFROM[images]whereidisnull",connGraph,1,3

recaddnew

rec("img")appendchunkmydata

recupdate

recclose

setrec=nothing

setconnGraph=nothing

%>

好了,这下我们就把上传来的保存到了名为imagesmdb的数据库中了,剩下的工作就是要将数据库中的数据显示到网页上面了。一般在HTML中,显示都是使用<IMG>标签,也就是<IMGSRC="路径">,但是我们的是保存到了数据库中,“路径”是什么呢?呵呵,其实这个SRC属性除了指定路径外,也可以这样使用哦:

<IMGSRC="showimgaspid=xxx">

所以,我们所要做的就是在showimgasp中从数据库中读出来符合条件的

数据,并返回到SRC属性中就可以了,具体代码如下(showimgasp):

<%

setconnGraph=serverCreateObject("ADODBconnection")

connGraphConnectionString="driver={MicrosoftAccessDriver(mdb)};DBQ="&

serverMapPath("imagesmdb")&";uid=;PWD=;"

connGraphOpen

setrec=servercreateobject("ADODBrecordset")

strsql="selectimgfromimageswhereid="&trim(request("id"))

recopenstrsql,connGraph,1,1

ResponseContentType="image/"

ResponseBinaryWriterec("img")getChunk(7500000)

recclose

setrec=nothing

setconnGraph=nothing

%>

注意在输出到浏览器之前一定要指定ResponseContentType="image/",

以便正常显示。

最后要注意的地方是,我的processasp中作的处理没有考虑到第一页(uploadhtm)中还有其他数据,比如<INPUT type=tesxt name=userid>等等,如果有这些项目,你的processasp就要注意处理掉不必要的数据。

原因如下:

1、因代码中的中文注释问题的报错

django项目的py文件文件中加入了中文注释,经常会因此报错而导致无法运行,究其原因是编码的问题,最后的解决办法是直接在有中文注释的py文件的顶部加上:# --coding:utf-8 --

2、运行过程中的中文乱码的报错

(1)首先确保连接的数据库的基础设置是utf-8。

(2)然后确认django项目中的网页头部设置编码为utf-8,网页头部加上代码:<meta charset="utf-8">。

(3)最后仍然报错就是因为django项目中我们没有指明编码方式,所以按照默认设置来,而非正常的utf-8。

(4)所以项目最后需要在进行编码 *** 作的地方,或者直接在settingspy中加入:import sys reload(sys) syssetdefaultencoding('utf-8')。

3、项目配置在debian系统中,FileField字段在admin中因中文文件名上传报错,解决如下:

(1)终端中 *** 作安装locales

(2)重新选择字符编码

(3)空格选择所有zh_开头的字符编码,OK确认下一步,选择中文UTF-8。

(4)debian里需要在~/bashrc里面最下面加入export LC_ALL=zh_CNUTF-8或者直接运行exportUTF-8。

(5)最后直接reboot重启服务器,查看系统编码,UTF-8中文生效,locale命令可以直接查看系统编码设置,此时再运行django项目上传中文名文件无误。

这个你看看符合你要求不

uploadxasp

<% Dim FormData, FormSize, Divider, bCrLf

FormSize = RequestTotalBytes

FormData = RequestBinaryRead(FormSize)

bCrLf = ChrB(13) & ChrB(10)

Divider = LeftB(FormData, InStrB(FormData, bCrLf) - 1)

'将上传的文件保存到path所指定的目录下面。

'Formfield 上传表单的"file"域名 Path

' 要保存文件的服务器绝对路径,形式为:"d:\path\subpath"或"d:\path\subpath\"

'MaxSize 限制上传文件的最大长度,以KByte为单位

' SavType 服务器保存文件的方式:

'0 唯一文件名方式,如果有同名则自动改名;

'1 报错方式,如果有同名则出错;

'2 覆盖方式,如果有同名则覆盖原来的文件

Function SaveFile(FormFileField, Path, MaxSize, SavType)

Dim StreamObj,StreamObj1

Set StreamObj = ServerCreateObject("ADODBStream")

Set StreamObj1 = ServerCreateObject("ADODBStream")

StreamObjMode = 3

StreamObj1Mode = 3

StreamObjType = 1

StreamObj1Type = 1

SaveFile = ""

StartPos = LenB(Divider) + 2

FormFileField = Chr(34) & FormFileField & Chr(34)

If Right(Path,1) <> "\" Then

Path = Path & "\"

End If

Do While StartPos > 0

strlen = InStrB(StartPos, FormData, bCrLf) - StartPos

SearchStr = MidB(FormData, StartPos, strlen)

If InStr(bin2str(SearchStr), FormFileField) > 0 Then

FileName = bin2str(GetFileName(SearchStr,path,SavType))

If FileName <> "" Then

FileStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4

FileLen = InStrB(StartPos, FormData, Divider) - 2 - FileStart

If FileLen <= MaxSize1024 Then

FileContent = MidB(FormData, FileStart, FileLen)

StreamObjOpen

StreamObj1Open

StreamObjWrite FormData

StreamObjPosition=FileStart-1

StreamObjCopyTo StreamObj1,FileLen

If SavType =0 Then

SavType = 1

End If

StreamObj1SaveToFile Path & FileName, SavType

StreamObjClose

StreamObj1Close

If SaveFile <> "" Then

SaveFile = SaveFile & "," & FileName

Else

SaveFile = FileName

End If

Else

If SaveFile <> "" Then

SaveFile = SaveFile & ",TooBig"

Else

SaveFile = "TooBig"

End If

End If

End If

End If

If InStrB(StartPos, FormData, Divider) < 1 Then

Exit Do

End If

StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2

Loop

End Function

'获取表单值

Function GetFormVal(FormName)

GetFormVal = ""

StartPos = LenB(Divider) + 2

FormName = Chr(34) & FormName & Chr(34)

Do While StartPos > 0

strlen = InStrB(StartPos, FormData, bCrLf) - StartPos

SearchStr = MidB(FormData, StartPos, strlen)

If InStr(bin2str(SearchStr), FormName) > 0 Then

ValStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4

ValLen = InStrB(StartPos, FormData, Divider) - 2 - ValStart

ValContent = MidB(FormData, ValStart, ValLen)

If GetFormVal <> "" Then

GetFormVal = GetFormVal & "," & bin2str(ValContent)

Else

GetFormVal = bin2str(ValContent)

End If

End If

If InStrB(StartPos, FormData, Divider) < 1 Then

Exit Do

End If

StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2

Loop

End Function

Function bin2str(binstr)

Dim varlen, clow, ccc, skipflag

skipflag = 0

ccc = ""

varlen = LenB(binstr)

For i = 1 To varlen

If skipflag = 0 Then

clow = MidB(binstr, i, 1)

If AscB(clow) > 127 Then

ccc = ccc & Chr(AscW(MidB(binstr, i + 1, 1) & clow))

skipflag = 1

Else

ccc = ccc & Chr(AscB(clow))

End If

Else

skipflag = 0

End If

Next

bin2str = ccc

End Function

Function str2bin(str)

For i = 1 To Len(str)

str2bin = str2bin & ChrB(Asc(Mid(str, i, 1)))

Next

End Function

Function GetFileName(str,path,savtype)

Set fs = ServerCreateObject("ScriptingFileSystemObject")

str = RightB(str,LenB(str)-InstrB(str,str2bin("filename="))-9)

GetFileName = ""

FileName = ""

For i = LenB(str) To 1 Step -1

If MidB(str, i, 1) = ChrB(Asc("\")) Then

FileName = MidB(str, i + 1, LenB(str) - i - 1)

Exit For

End If

Next

If savtype = 0 and fsFileExists(path & bin2str(FileName)) = True Then

hFileName = FileName

rFileName = ""

For i = LenB(FileName) To 1 Step -1

If MidB(FileName, i, 1) = ChrB(Asc("")) Then

hFileName = LeftB(FileName, i-1)

rFileName = RightB(FileName, LenB(FileName)-i+1)

Exit For

End If

Next

For i = 0 to 9999

hFileName = hFileName & str2bin(i)

If fsFileExists(path & bin2str(hFileName) & i & bin2str(rFileName)) = False Then

FileName = hFileName & str2bin(i) & rFileName

Exit For

End If

Next

End If

Set fs = Nothing

GetFileName = FileName

End Function

%>

var FileForm = Extcreate('ExtformPanel', {

    border : false,

    layout : 'hbox',

    margin : '0 10 5 10',

    hidden : true,

    items : [{

    xtype : 'filefield',

    id : 'Filefield',

    buttonText : '选择文件',

    width : 360

    }, {

    xtype : 'button',

    text : '上传',

    width : 80,

    margin : '0 0 0 10',

    handler : uploadFiles // 方法

}]

多附件struts 1x,以下代码由agatezone提供。

1Jsp要用javascript

2form必须enctype="multipart/form-data"

3action要用formgetMultipartRequestHandler()获取文件并存储

struts2 更简单,google之。

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN" "">

<html>

<head>

<meta >

在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛。

首先,在你的VisualC#webproject中增加一个上传用的WebForm,为了要上传文件,需要在ToolBox中选择HTML类的FileField控件,将此控件加入到WebForm中,然而此时该控件还不是服务端控件,我们需要为它加上如下一段代码:<inputid=uploadfile1type=filesize=49runat=server>,这样它就成为服务端控件了,如果需要同时上传数个文件时,我们可以相应增加此控件。

需要注意的是代码中一定要把<form>的属性设置成为:

<formmethod=postencType=multipart/form-datarunat=server>

如果没有这个属性,就不能实现上传。

然后在此WebForm中增加一个WebForm类的Button,双击Button添加如下代码:

//上传的程序段

DateTimenow=DateTimeNow;

//取现在时间到DataTime类的对象now中

stringstrBaseLocation=D:\\web\\FC\\pic\\;

//这是文件将上传到的服务器的绝对目录

if(uploadfile1PostedFileContentLength!=0)//判断选取对话框选取的文件长度是否为0

{uploadfile1PostedFileSaveAs(strBaseLocation+nowDayOfYearToString()+uploadfile1PostedFileContentLengthToString()+jpg);

//执行上传,并自动根据日期和文件大小不同为文件命名,确保不重复

Label1Text=1已经上传,文件名为:+nowDayOfYearToString()+uploadfile1PostedFileContentLengthToString()+jpg;

navigatorInsert(SystemXmlTreePositionAfter,XmlNodeTypeElement,pic1,,);

navigatorInsert(SystemXmlTreePositionFirstChild,XmlNodeTypeText,pic1,,);

navigatorValue=nowDayOfYearToString()+uploadfile1PostedFileContentLengthToString()+jpg;

navigatorMoveToParent();}

上面的代码用于笔者开发的一个使用XML文件存储新闻信息的系统中,后面几句代码作用是写上传文件信息到XML文件中。如果要上传其他类型文件,只需要将jpg改为相应类型的后缀名即可,如改为doc即可上传Word文件,浏览器即可直接浏览上传的Word文件。

注意事项

1上传文件不可以无限大;

2要注意IIS的安全性方面的配合;

3用VisualStudio的安装项目做安装程序的时候,请注意安装程序所在的绝对路径问题;

4注意文件上传后的重名问题。

编辑 settings:

MEDIA_ROOT 和 MEDIA_URL 代表的是用户上传后的文件保存的地方。可以理解为存放可变文件的文件夹。

这两个参数有什么用处呢?

在 Django 的 FileField 和 ImageField 这样的 Model 类中,有 upload_to 参数可选。当 upload_to 设置相关的地址后,如例子:

文件上传后将自动保存到: ospathjoin(MEDIA_ROOT, upload_to) ,在本例中就是: /static/uploads/test_pictures

而 MEDIA_URL ,则代表用户可以通过怎样的 URL 来访问这些上传后的文件资源。

在本例子中,本机地址是: >

以上就是关于Django 运行开发服务器时报错是怎么回事全部的内容,包括:Django 运行开发服务器时报错是怎么回事、怎样用asp实现图片上传到文件夹,路径保存在access数据库中、Django 运行开发服务器时报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9755926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存