百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2024-09-02 16:27 3 浏览

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

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.ioloop
import tornado.web

class 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,我们可以看到如下所示的界面。

创建成功后,我们可以看到如下图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文件。

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

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

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

python manage.py runserver

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

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

输入如下指令,创建一个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 = False

ALLOWED_HOSTS = ["0.0.0.0"]

17.4.2 通过Tornado来创建网站

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

# -*- coding=utf-8 -*-

import os

from tornado import gen, web
from tornado import httpserver
from tornado import ioloop


class 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")
        pass


def 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 os

from tornado import gen, web
from tornado import httpserver
from tornado import ioloop


class 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")
        pass


def 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所示界面,显示登陆成功。接下来,我们可以看看登陆页面的代码。

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

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to Yonggang Liu's Website</title>
<link rel="icon" href="images/logo.ico" type="image/x-icon"/>
<script></script>
</head>
<body>
<form name="input" action="/" method="post">
UserName <input name="user" type="text">
Password <input name="password" type="password">
<button type="submit">Login</button>
</form>
</body>
</html>
success.html页面的代码如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to Yonggang Liu's Website</title>
<link rel="icon" href="images/logo.ico" type="image/x-icon"/>
<script></script>
</head>
<body>
Successed login
</body>
</html>

17.5 本章小结

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


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


相关推荐

一条命令搞定pip国内镜像源设置(pip install 指定镜像)

玩python的同学想必没有不用pip的吧,pip是python包管理工具,和Nodejs的npm、Java的maven类似,这些依靠开源力量建立起的庞大软件库极大提高了开发的效率,不过默认pytho...

Cadence Allegro在PCB中手动或者自动添加差分对属性

设计PCB过程中,若设计中有差分对信号,则需要将是差分的2个信号设置为差分对,设置差分对有2种方式:手动添加及自动添加一、手动添加差分对:1、点击Setup-Constraints-Constrain...

合亿 Gutab 三防|车载工业平板功能介绍,车载工业平板厂家推荐

在商用车队管理迈向智能化、特种车辆作业追求高效化的今天,车载工业平板早已突破传统“车载导航”的单一功能,成为连接车辆、司机与云端管理的核心枢纽。从物流运输的实时调度中枢,到矿山开采的无人驾驶控制器,再...

「探长分享-黑匣子」本田冠道 2020款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】本田冠道2020款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步标...

「探长分享-黑匣子」奥迪A6L 2019款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】奥迪A6L2019款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步...

探长360全景案例分享:奥迪Q7 2011款360全景效果展示

【品牌】DCT360汽车黑匣子【产品型号】3TPro【安装车型】奥迪Q72011款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停...

「探长分享-黑匣子」保时捷Cayenne 2015款

【品牌】探长360汽车黑匣子【产品型号】4TPro【安装车型】保时捷Cayenne2015款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,...

苍蝇再小也是肉,变态电路的大阳巧客S2差点难死大神

这台大阳巧客S2电动四轮车是我家第二台四轮俱全的篷车!哈哈!大阳巧客S2配置4.5Kw永磁同步电机,SVPWM矢量控制正弦波系统,车辆在加速、爬坡上性能有提升,效率高,操控灵敏。这台车前段时间刚更换了...

「探长分享-黑匣子」奥迪Q5L 2020款

360汽车黑匣子【产品型号】4TPro【安装车型】奥迪Q5L2020款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停车监控,一秒一...

「探长分享-黑匣子」丰田兰德酷路泽 2016款

【品牌】探长360汽车黑匣子【产品型号】3TPro【安装车型】丰田兰德酷路泽2016款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小...

驾驶室盲区是酿成重卡事故主因?后视系统:这个锅我不背

小时候家中长辈常常提醒:离大货车远一点!司机根本看不到你!早期的货车可能真的存在驾驶盲区,比如车辆正下方,因驾驶座过高,恰好是司机看不到的视野盲区。而如今的重卡在环视系统上已经非常完善,是否还存在驾驶...

前后双录,360 G580行车记录仪(360行车记录仪g580s)

相信每一位车主都会为爱车安装行车记录仪,行车记录仪的作用不仅能为交通事故还原证据,还能防止碰瓷。传统的单镜头行车记录仪只能拍摄车头方向的行车画面,如果遇到后方车辆故意碰瓷的事故时,没有监控和后摄画面则...

海康威视同轴录像机怎么使用,海康XVR配置说明

海康威视同轴录像机支持模拟、同轴以及数字IP摄像机接入,因此在使用多种类型摄像机、老久监控项目改造等场景广泛使用。首先,新录像机第一次使用需要设置管理密码激活,密码需由8-16位数字、小写字母、大写...

亿道三防2代工业级车载平板电脑震撼登场,农机矿车专用

亿道三防近日推出2024年全新2代车载平板电脑V12R,引领多项技术创新和升级,为农机、矿车等车载领域带来了超越期待与想象的震撼体验。V12R是一款从里到外,性能、功能全线拉满的工业级车载平板电脑!拥...

分析神州十八号返回舱内的摄像机最有可能是什么类型的摄像头

有没有发现,神州十八号返回舱内摄像机的图像虽然清晰度不是很高,但是画面非常干净,没有一点干扰,几乎看不到噪点。图像清晰度不高不太可能是镜头原因,很可能是图像传感器的分辨率比较低的原因,图像传感器分辨率...