python编程案例_Python实用案例编程入门:第十七章 利用Python建立个人网站

本章的主题为创建一个自己的个人网站。

17.1 要解决什么问题

在互联网上存在着难以计数的网站,有企业的,政府的,各类组织及个人网站的等待,那么我们能否给自己建立一个网站呢?这当然肯定是没问题的,搭建个人网站有很多选择。我们既然在学Python,那么就利用Python的Django来为我们自己建立一个网站。

当然了,网站和网站之间的差异也很大。比如新闻类的网站,可能只是提供了很多页面用于展示新闻信息,而一些订火车票订机票类的网站,就需要比较复杂的技术。而个人网站,大多就是用几个页面来展示一些信息。

17.2 实现思路

要搭建一个个人网站,我们需要做哪些工作呢?

  • 需要先给自己申请一个域名,可以搜索域名注册,可以找到很多提供域名申请的网站;
  • 需要一个有公网IP地址的服务器,可以购买一个云主机,也可以自己在家里搭建一个;
  • 在买域名的时候一般都会免费赠送域名解析,这里可以将服务器的公网IP地址和域名进行绑定,这样在通过域名访问时就会被DNS解析;
  • 接下来就需要利用Django创建自己的网站工程,并调试到可以运行;
  • 将网站部署到我们第二步的服务器上;
  • 通过申请的域名进行访问,来确认是否网站部署成功;
  • 通过Tornado来建立一个简单的web服务器;

17.3 相关模块的安装及介绍

本节将会本章涉及到的相关模块。

17.3.1 Django模块

Django是一个Python实现的开源Web服务器框架,提供了基本视图,模型和模板。基于该框架,我们可以很容易的构建一个网站应用。相对于下节将要提到的Tornado来说,Django是一个重量级的Web服务器框架,功能非常全面,有利于开发复杂的网站。模型提供了对应用数据结构的抽象,而视图用于处理一个用户的请求,并返回响应。模板则提供了一个设计友好的render语法,用于向用户显示信息。

可以通过pip命令进行安装。

pip install django

如果想要更深入的学习了解,可以通过下面的链接。

17.3.2 Tornado模块

Tornado是一个当前比较流行的开源Web服务器框架,其优势在于实现了一个非阻塞式服务框架。其底层实现是基于C语言的epoll技术,因此性能极好。在一些大型在线游戏中,也使用该框架进行游戏服务器端开发,因此在性能方面完全支持企业级应用。

可以通过pip命令进行安装,安装命令如下。

pip install tornado

这里有一个基于Tornado实现的,简单的"Hello world"的web例子。

import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler):    def get(self):        self.write("Hello, world")def make_app():    return tornado.web.Application([        (r"/", MainHandler),    ])if __name__ == "__main__":    app = make_app()    app.listen(8888)    tornado.ioloop.IOLoop.current().start()

更多关于Tornado模块的详细信息可以参考下面的链接。

17.4 代码实现

到这里,我们开始具体实现我们自己的个人网站了。

17.4.1 通过Django来创建网站

我们这里通过Pycharm IDE来创建Django工程,如果没有安装Pycharm也可以通过命令行进行创建,稍后会进行介绍。

通过File->New Project,我们可以看到如下所示的界面。

dfb90a01b192eb3f75d75a5babb20986.png

图17-1 创建Django工程

创建成功后,我们可以看到如下图17-2所示的界面,左侧是工程目录,可以看到有一个django_sites目录,在该目录有两个子目录django_sites和person_web,在django_sites目录下分别是settings.py负责项目配置,urls.py路由模块和wsgi.py网络通信模块。person_web子目录下分别是admin.py负责用户权限,models负责数据模型,views.py负责业务逻辑。另外还有一个sqlite3的数据库文件db.sqlite3,一个manage.py文件。

5d3da410e2064f1318f55fe7129cac4a.png

图17-2 Django工程

接下来,我们需要进入工程目录,然后执行下面的命令,对数据存储服务进行初始化。

>cd django_sitesdjango_sites>python manage.py migrateOperations to perform:Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying sessions.0001_initial... OK

到这里,万事俱备只欠东风,通过下面的命令我们可以运行该django server了。

python manage.py runserver

执行上面命令后,将会启动Django server。在浏览器中输入http://127.0.0.1:8000/可以打开如下图17-3所示的界面,表示Django已经可以正常运行。

acd6168f456fc1ae9d0802c6c783a4da.png

图17-3 Django Debug模式界面

当然了,我们也可以完全通过命令行进行上面的操作,大致过程如下。

输入如下指令,创建一个Django项目django_sites。

django-admin startproject django_sites

执行成功后,进入django_sites目录,通过下面的命令对数据存储服务进行初始化。

python manage.py migrate

紧接着,输入如下指令启动服务器。

python manage.py runserver

下面就可以通过浏览器进行访问了,但这仅仅是让Django服务运行起来了,我们还需要实现自己的页面。

在开始使用自己定义的主页前,需要将settings.py文件中的DEBUG修改为False,并且需要在ALLOWED_HOSTS中添加运行访问的主机IP地址,如下所示,0.0.0.0表示运行任何主机访问。# SECURITY WARNING: don't run with debug turned on in production!DEBUG = FalseALLOWED_HOSTS = ["0.0.0.0"]

17.4.2 通过Tornado来创建网站

本节我们介绍如何通过Tornado来创建网站, 代码结构比Django简单的多,个人更喜欢Tornado来实现网站。下面代码段展示了如何实现一个http服务器端,后面紧接着会展示如何实现一个https服务器端。

# -*- coding=utf-8 -*-import osfrom tornado import gen, webfrom tornado import httpserverfrom tornado import ioloopclass MainHandler(web.RequestHandler):    def data_received(self, chunk):        pass    @gen.coroutine    def get(self):        self.render("login.html")    @gen.coroutine    def post(self):        print(self.request)        print(self.request.remote_ip)        print(self.get_argument('user'))        print(self.get_argument('password'))        self.render("success.html")        passdef main():    settings = {        "static_path": os.path.join(os.path.dirname(__file__), "static"),    }    application = web.Application([(r"/", MainHandler), ], autoreload=True,  **settings)    server = httpserver.HTTPServer(application)    server.listen(8000)    ioloop.IOLoop.instance().start()if __name__ == '__main__':    main()下面的服务器端支持https,因此需要证书文件。# -*- coding=utf-8 -*-import osfrom tornado import gen, webfrom tornado import httpserverfrom tornado import ioloopclass MainHandler(web.RequestHandler):    def data_received(self, chunk):        pass    @gen.coroutine    def get(self):        self.render("login.html")    @gen.coroutine    def post(self):        print(self.request)        print(self.request.remote_ip)        print(self.get_argument('user'))        print(self.get_argument('password'))        self.render("success.html")        passdef main():    settings = {        "static_path": os.path.join(os.path.dirname(__file__), "static"),    }    application = web.Application([(r"/", MainHandler), ], autoreload=True,  **settings)    server = httpserver.HTTPServer(application, ssl_options={             "certfile": os.path.join(os.path.abspath("."), "server.crt"),             "keyfile": os.path.join(os.path.abspath("."), "server.key"),    })    server.listen(8000)    ioloop.IOLoop.instance().start()if __name__ == '__main__':    main()

启动该代码后,我们可以通过浏览器进行访问,会得到如图17-4所示界面,可以看到是一个简单的登陆界面,需要输入用户名和密码。这里,我们随便输入一个用户名和密码,会得到如图17-5所示界面,显示登陆成功。接下来,我们可以看看登陆页面的代码。

1c6611a15ddaaeaebe226b80abbcab7a.png

图17-4 Tornado实现的登陆界面

18add9351fd650c7e2796012004aac28.png

图17-5 Tornado登陆界面的响应

从上面服务器端的代码实现,我们可以知道,get()方法只是简单的显示login.html页面,而post()方法则是打印访问的远端IP地址和用户输入的用户名密码后,直接显示success.html页面。

login.html页面的代码实现如下所示。

Welcome to Yonggang Liu's WebsiteUserName Password Loginsuccess.html页面的代码如下所示。Welcome to Yonggang Liu's WebsiteSuccessed login

17.5 本章小结

本章介绍了两种途径来建立自己的个人网站,两种方法只是介绍了如何搭起一个基本框架,两种框架都具备支持企业级业务。因此,我们实现一个个人网站就不在话下。当然这里的介绍相对比较简单,只是让我们能够搭建起服务器端,并看到一个简单的首页。我们自己实现的时候,需要丰富页面内容,增加相应的功能。


欢迎关注,点赞,转发,收藏


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值