Python程序设计语言Python网络程序设计张晓西北工业大学计算机学院zhangxiao@nwpu.edu.cn2009-8-10Python程序设计语言Python网络编程概述TCP/UDP编程Mail编程Web编程Python程序设计语言Socket编程--TCP编程Server端处理流程socket创建一个socketbind绑定到指定端口accept接受连接read/write读写数据close关闭连接Client端处理流程socket创建一个socketconnect连接到指定端口read/write读写数据close关闭连接Python程序设计语言Socket编程--UCP编程Server端处理流程socket创建一个socketbind绑定到指定端口recvfrom读取数据close关闭连接Client端处理流程socket创建一个socketconnect连接到指定端口sendto发送数据close关闭连接Python程序设计语言Email编程收邮件POP3协议使用poplib模块发邮件SMTP协议使用smtplib模块importpoplibimportemailhelp(poplib)help(email)importsmtplibimportemailhelp(smtplib)help(email)Python程序设计语言POP3协议介绍POP3命令对应函数USERnameuser(name)PASSstringpass_(string)STATstat()LIST[msg]list(msg=None)RETRmsgretr(msg)DELEmsgdele(msg)NOOPnoop()RSETrset()QUITquit()telnetip110POP3(ip,port=110)Python程序设计语言例子输入用户名,密码,收邮件输入用户名,密码,主题,正文内容,发送邮件Python程序设计语言Email相关低层模块email—AnemailandMIMEhandlingpackagejson—JSONencoderanddecodermailcap—Mailcapfilehandlingmailbox—Manipulatemailboxesinvariousformatsmhlib—AccesstoMHmailboxesmimetools—ToolsforparsingMIMEmessagesmimetypes—MapfilenamestoMIMEtypesMimeWriter—GenericMIMEfilewritermimify—MIMEprocessingofmailmessagesmultifile—Supportforfilescontainingdistinctpartsrfc822—ParseRFC2822mailheadersbase64—RFC3548:Base16,Base32,Base64DataEncodingsbinhex—Encodeanddecodebinhex4filesbinascii—ConvertbetweenbinaryandASCIIquopri—EncodeanddecodeMIMEquoted-printabledatauu—EncodeanddecodeuuencodefilesPython程序设计语言Web编程—取得网页打开一个网页获取所有的内容获取Http头fromurllibimporturlopendoc=urlopen().read()printdocfromurllibimporturlopendoc=urlopen()printdoc.info()printdoc.info().getheader('Content-Type')Python程序设计语言Web编程—使用代理查看环境变量设置环境变量使用代理printn.join([%s=%s%(k,v)fork,vinos.environ.items()])printos.getenv(http_proxy)importosos.putenv(http_proxy,)#Use={'http':'}filehandle=urllib.urlopen(some_url,proxies=proxies)#Don'tuseanyproxiesfilehandle=urllib.urlopen(some_url,proxies={})#Useproxiesfromenvironment-bothversionsareequivalentfilehandle=urllib.urlopen(some_url,proxies=None)filehandle=urllib.urlopen(some_url)Python程序设计语言Web编程—服务器侧Django框架Django是一个Python的Web框架,可运行于Python2.4—2.6,目前不支持Python3.x。可在下载最新的安装包和文档Django的安装Setup.pyinstallPython程序设计语言创建第一个django程序(1/3)使用django-admin.py创建初始目录最好将该脚本放入PATH路径中使用django-admin.pyhelp可查看所有命令django-admin.pystartprojectnewtest生成newtest目录__init__.py表示这是一个Python的包manage.py提供简单化的django-admin.py命令,特别是可以自动进行DJANGO_SETTINGS_MODULES和PYTHONPATH的处理,而没有这个命令,处理上面环境变量是件麻烦的事情settings.py它是django的配置文件uls.pyurl映射处理文件,Karrigell没有这种机制,它通过目录/文件/方法来自动对应,而Django的url映射是url对于某个模块方法的映射,目前不能自动完成Python程序设计语言创建第一个django程序(2/3)使用manage.pyrunserver启动服务器Validatingmodels...0errorsfoundDjangoversion1.1.1,usingsettings'newtest.settings'Developmentserverisrunningat程序设计语言创建第一个django程序(3/3)创建一个文件helloworld.py修改urls.py,增加helloworld.py的映射fromdjango.httpimportHttpResponsedefindex(request):returnHttpResponse(Hello,Django.)在示例下增加一行(r'^$','newtest.helloworld.index'),Python程序设计语言第二个程序(使用Post)做一个加法程序增加一个add.py修改urls.py,增加对add的调用1.在form中的method=“post”。你当然可以使用get,但是在Django的设计风格中认为,使用POST表示要对数据进行修改,使用GET则只是获取,这是一个设计风格2.Django提供了URLDispatch文档,专门讲解有关url映射的东西。其中有一部分是关于url的正则表达式解析的。3.使用request.POST或request.GET或还有一个可以“统吃”的方法request.REQUEST,它们是一个字典数据,使用起来也算方便。Python程序设计语言第三个程序(使用模板)创建list.py一个新方法是render_to_response,直接调用模板并返回生成好的文本,直接返回它即可。它接收两个参数,第一个是模板的名字。第二个参数是一个字典,这里只有一个Key,名字是address,key在模板中引用,它的值是一个字典的列表。也可以在字典中输入多个变量传递参数。在newtest中创建templates目录修改settings.py,设置TEMPLATE_DIRS创建templates/list.html修改urls.pyPython程序设计语言第四个程序(生成csv文件)Django的大致开发流程增加view方法增加模板修改urls.py修改流程修改templates/list.html,增加生成csv的链接在newtest下增加csv_test.py,处理该链接增加templates/csv.html,作为生成的模板修改urls.py,将链接和处理程序结合在一起Python程序设计语言第五个程序(使用session)创建流程创建login.py,表示View创建templates/login.html修改urls.py,增加Login/logout的url处理修改settings.py,设置数据库参数初始化数据库常见问题:ImportError:DLLloadfailed:找不到指定的模块。解决方法:下载libmmd.dll(附件)和libguide40.dll(附件)两个dll文件并复制到python安装目录的Lib\site-packages下Python程序设计语言数据库的安装与设置Python支持sqllite,SQLserver,Mysql等多种数据库需要安装不同数据库的连接程序安装步骤安装Mysql安装Mysql的GUI设置程序安装Mysql的连接程序使用Python验证连接程序是否正确安装打补丁Python程序设计语言第六个程序(使用数据库)1/3建立学生数据库可使用Mysql可视化界面设计表格使用sql脚本将学生数据导入数据库中deletefrom(删除数据)Insertinto(插入数据)Python程序设计语言第六个程序(使用数据库)2/3使用数据库引入我们需要的包importMySQLdb建立连接conn=MySQLdb.connect(host=localhost,user=root,passwd=sa,db=mytable)执行SQL语句获取返回值cursor=conn.cursor()//查询sql=select*from【table】“执行查询cursor.execute(sql),返回值为得到的记录数,然后使用cursor对象的fetchone或fetchall方法获得所有数据。分别关闭cursor和连接cursor.close(),conn.close()Python程序设计语言第六个程序(使用数据库)3/3使用模板把学生名单显示出来类似与第三个程序list.py创建过程创建liststudent.py创建templates/liststudent.html修改urls.py