怎么用python写一个网站(用Python写网站)

怎么用python写一个网站(用Python写网站)造轮子是最好的一种学习方式,本文尝试从0开始造个Python Web框架的轮子,我称它为 ToyWebF 。

本文目录一览:

纯 Python 写一个 Web 框架,就是这么简单

造轮子是最好的一种学习方式,本文尝试从0开始造个Python Web框架的轮子,我称它为 ToyWebF 。

本文操作环境为:MacOS,文中涉及的命令,请根据自己的系统进行替换。

ToyWebF的简单特性:

下面我们来实现这些特性。

首先,我们需要安装gunicorn,回忆一下Flask框架,该框架有内置的Web服务器,但不稳定,所以上线时通常会替换成uWSGI或gunicorn,这里不搞这个内置Web服务,直接使用gunicorn。

我们创建新的目录与Python虚拟环境,在该虚拟环境中安装gunicorn

在啥都没有的情况下,构建最简单的Web服务,在ToyWebF目录下,创建app.py与api.py文件,写入下面代码。

运行 gunicorn app:app 访问 ,可以看见 Hello, World! ,但现在请求体中的参数在environ变量中,难以解析,我们返回的response也是bytes形式。

我们可以使用webob库,将environ中的数据转为Request对象,将需要返回的数据转为Response对象,处理起来更加直观方便,直接通过pip安装一下。

然后修改一下API类的 __call__方法 ,代码如下。

上述代码中,通过webob库的Request类将environ对象(请求的环境信息)转为容易处理的request,随后调用handle_request方法对request进行处理,处理的结果,通过response对象返回。

handle_request方法在ToyWebF中非常重要,它会匹配出某个路由对应的处理方法,然后调用该方法处理请求并将处理的结果返回,在解析handle_request前,需要先讨论路由注册实现,代码如下。

其实就是将路由和方法存到self.routes字典中,可以通过route装饰器的形式将路由和方法关联,也可以通过add_route方法关联,在app.py中使用一下。

因为url中可以存在变量,如 @app.route(“/hello/{name}”) ,所以在匹配时,需要进行解析,可以使用正则匹配的方式进行匹配,parse这个第三方库已经帮我们实现了相应的正则匹配逻辑,pip安装使用一下则可。

这里定义find_handler方法来实现对self.routes的遍历。

了解了路由与方法关联的原理后,就可以实现handle_request方法,该方法主要的路径就是根据路由调度对应的方法,代码如下。

在该方法中,首先实例化webob库的Response对象,然后通过self.find_handler方法获取此次请求路由对应的方法和对应的参数,比如。

它将返回hello方法对象和name参数,如果是 /hello/二两 ,那么name就是二两。

因为route装饰器可能装饰器的类对象,比如。

此时self.find_handler方法返回的hanler就是个类,但我们希望调用的是类中的get、post、delete等方法,所以需要一个简单的判断逻辑,通过inspect.isclass方法判断handler如果是类对象,那么就通过getattr方法获取类对象实例的中对应的请求方法。

如果类对象中没有该方法属性,则抛出该请求类型不被允许的错误,如果不是类对象或类对象中存在该方法属性,则直接调用则可。

此外,如果方法的路由并没有注册到self.routes中,即404的情况,定义了defalut_response方法返回其中内容,代码如下。

如果handle_request方法中调度的过程出现问题,则直接raise将错误抛出。

至此,一个最简单的web服务就编写完成了。

回顾Flask,Flask可以支持HTML、CSS、JavaScript等静态文件,利用模板语言,可以构建出简单但美观的Web应用,我们让TopWebF也支持这一功能,最终实现图中的网站,完美兼容静态文件。

Flask使用了jinja2作为其html模板引擎,ToyWebF同样使用jinja2,jinja2其实实现一种简单的DSL(领域内语言),让我们可以在HTML中通过特殊的语法改变HTML的结构,该项目非常值得研究学习。

首先 pip install jinja2 ,然后就可以使用它了,在ToyWebF项目目录中创建templates目录,以该目录作为默认的HTML文件根目录,代码如下。

首先利用jinja2的FileSystemLoader类将file system中的某个文件夹作为loader,然后初始化Environment。

在使用的过程中(即调用template方法),通过get_template方法获得具体的某个模板并通过render方法将对应的内容传递给模板中的变量。

这里我们不写前端代码,直接去互联网中下载模板,这里下载了Bootstrap提供的免费模板,可以自行去 下载,下载完后,你会获得index.html以及对应的css、jss、img等文件,将index.html移动到ToyWebF/templates中并简单修改了一下,添加一些变量。

然后在app.py文件中为index.html定义路由以及需要的参数。

至此html文件的支持就完成了,但此时的html无法正常载入css和js,导致页面布局非常丑陋且交互无法使用。

接着就让ToyWebF支持css、js,首先在ToyWebF目录下创建static文件夹用于存放css、js或img等静态文件,随后直接将前面下载的模板,其中的静态文件复制到static中则可。

通过whitenoise第三方库,可以通过简单的几行代码让web框架支持css和js,不需要依赖nginx等服务,首先 pip install whitenoise ,随后修改API类的 __init__ 方法,代码如下。

其实就是通过WhiteNoise将self.wsgi_app方法包裹起来,在调用API的 __call__ 方法时,直接调用self.whitenoise。

此时,如果请求web服务获取css、js等静态资源,WhiteNoise会获取其内容并返回给client,它在背后会匹配静态资源在系统中对应的文件并将其读取返回。

至此,一开始的网页效果就实现好了。

web服务如果出现500时,默认会返回 internal server error ,这显得比较丑,为了让框架使用者可以自定义500时返回的错误,需要添加一些代码。

首先API初始化时,初始self.exception_handler对象并定义对应的方法添加自定义的错误

在handler_request方法进行请求调度时,调度的方法执行逻辑时报500,此时不再默认将错误抛出,而是先判断是否有自定义错误处理。

在app.py中,自定义错误返回方法,如下。

custom_exception_handler方法只返回自定义的一段话,你完全可以替换成美观的template。

我们可以实验性定义一个路由来看效果。

Web服务的中间件也可以理解成钩子,即在请求前可以对请求做一些处理或者返回Response前对Response做一下处理。

为了支持中间件,在TopWebF目录下创建middleware.py文件,在编写代码前,思考一下如何实现?

回顾一下现在请求的调度逻辑。

1.通过routes装饰器关联路由和方法 2.通过API.whitenoise处理 3.如果是请求API接口,那么会将参数传递给API.wsgi_app 4.API.wsgi_app最终会调用API.handle_request方法获取路由对应的方法并调用该方法执行相应的逻辑

如果希望在request前以及response后做相应的操作,那么其实就需要让逻辑在API.handle_request前后执行,看一下代码。

其中add方法会实例化Middleware对象,该对象会将当前的API类实例包裹起来。

Middleware.handle_request方法其实就是在self.app.handle_request前调用self.process_request方法处理request前的数据以及调用self.process_response处理response后的数据,而核心的调度逻辑,依旧交由API.handle_request方法进行处理。

这里的代码可能会让人感到疑惑, __call__ 方法和handle_request方法中都有self.app.handle_request(request),但其调用对象似乎不同?这个问题暂时放一下,先继续完善代码,然后再回来解释。

接着在api.py中为API创建middleware属性以及添加新中间件的方法。

随后,在app.py中,自定义一个简单的中间件,然后调用add_middleware方法将其添加。

定义好中间件后,在请求调度时,就需要使用中间件,为了兼容静态文件的情况,需要对css、js、ing文件的请求路径做一下兼容,在其路径中加上/static前缀

紧接着,修改API的 __call__ ,兼容中间件和静态文件,代码如下。

至此,中间件的逻辑就完成了。

但代码中依旧有疑惑,Middleware类中的 __call__ 方法和handle_request方法其调用的self.app到底是谁?

为了方便理解,这里一步步拆解。

如果没有添加新的中间件,那么请求的调度逻辑如下。

在没有添加中间件的情况下,self.app其实就是API本身,所以 middleware.__call__ 中的self.app.handle_request就是调用API.handle_request。

如果添加了新的中间件,如上述代码中添加了名为SimpleCustomMiddleware的中间件,此时的请求调度逻辑如下。

因为注册中间件时,Middleware.add方法替换了原始Middleware实例中的app对象,将其替换成了SimpleCustomMiddleware,而SimpleCustomMiddleware也有app对象,SimpleCustomMiddleware中的app对象,才是API类实例。

在请求调度的过程中,就会触发Middleware类的handle_request方法,该方法就会执行中间件相应的逻辑去处理request和response中的数据。

当然,你可以通过Middleware.add方法添加多个中间件,这就会构成栈式调用的效果,代码如下。

启动web服务后,其执行效果如下。

怎么用python写一个网站(用Python写网站)

怎么用python架设一个网站

你可以使用python的django来架设网站,步骤如下:

Django的安装运行环境:Windows vista, python2.7

python安装路径:C:\Python27

从 下载django安装包。

解压后,进入django目录,运行 python setup.py install,启动安装。

Django被安装在 C:\Python27\Lib\site-packages

第一个工程的创建

生成工程框架:

c:\test\mysitepython C:\Python27\Lib\site-packages\django\bin\django-admin.py startproject mysite1

运行开发服务器:

python manage.py runserver

在浏览器中,访问 ,看到 “Welcome to Django” 的提示。

如果解决了您的问题请采纳!

如果未解决请继续追问!

想用python编写一个脚本,登录网页,在网页里做一系列操作,应该怎样实现?

python编写一个脚本的具体操作:

1、首先,打开python并创建一个新的PY文件。

2、其次,import os,因为涉及系统文件的路径,因此首先在此处导入系统模块。

3、随后,可以双击打开HTML文件,然后就可以看到书写的网页,如下图所示。

4、最后,添加html.close(),需添加此行代码以关闭,否则将占用大量内存,如下图所示。这样,用python简单的制作一个网页的所有操作就完成了。完成。

如何用Python做一个网站?

Install

pip install Django

2. 新建一个工程

django-admin startproject mysite

然后,我们会得到一个这样的文件结构

请点击输入图片描述

python manage.py runserver 0.0.0.0:8888

然后,你就可以在浏览器地址栏中输入

请点击输入图片描述

恩,运行到这里,就说明没有出现什么未知的错误哦

但是,现在我们的网站还是空空的。

下面,我们就往里面加东西。

添加一个app应用

python manage.py startapp myweb

这里,我的app取名为myweb

我们再看一下,目录的结构的变化

请点击输入图片描述

接下来,我们虽然创建了这个app,但是需要添加到配置中(唉,还不能自动添加呢)

vim mysite/settings.py

请点击输入图片描述

我们添加应用之后,接下来需要做什么呢?

我们如果要访问一个网站,第一步需要在地址栏里输入网页的地址吧。

同样地,我们需要先确定web的url

vim mysite/urls.py

请点击输入图片描述

接下来,我们就需要编辑返回给用户的信息了。

vim myweb/views.py

请点击输入图片描述

现在,我们启动服务器吧

回到网站的根目录

请点击输入图片描述

然后

python manage.py runserver 0.0.0.0:8888

然后,你就可以在浏览器地址栏中输入

然后。。。

你会发现出现404错误啦。。。

哈哈!

这是怎么回事呢?

这是因为我们的网址错了。

错在哪里了呢?

细心的孩子会发现,我们在编辑web的url的时候,

请点击输入图片描述

我们建立了一个以myweb开头的正则表达式。

因此,我们需要输入的网址是

请点击输入图片描述

OK,Great!

End.

怎么用python写网站

首先呢,你只有Python语言基础,现在想使用Python搭建一个网站。网站类似于豆瓣读书,具体功能不需要豆瓣读书那么多。实话跟你

说吧,有点难度,毕竟要搭建网站需要用到的知识还是挺多的。

还是跟你说说具体步骤吧。

1、导入django包

可直接在pycharm下载,或者pip/easy_install

2、设置环境变量

path 添加 C:Python27Libsite-packagesdjangobin;C:Python27Scripts

3、新建一个工程

D:django-admin.py startproject mysite

4、工程下新建一个app

D:mysite python manage.py startapp blog

5、初始化admin后台数据库

D:mysitepython manage.py migrate

6、启动服务

D:mysitepython manage.py runserver

python学习网,免费的python学习网站,欢迎在线学习!

至于你现在需要学些什么这个问题,HTML、Javacript 和 CSS 都是必学的三大门功课。不管怎样,还是踏踏实实找个地方学习吧,多些

实战。一定要把基础知识打好,入门一段时间后就可以建网站啦。Python简单、好入门、可以干好多事情。小到写脚本、大到做网站、

数据分析等等。人生苦短,我用Python。

至于网站如何才能被访问,我在这里有几种方法想告诉你:

1.可在百度,谷歌等搜索引擎购买链接,或者推广链接!但是,费用较高!

2.或者在其他论坛,空间发言是付上自己的网站域名和简单介绍。廉价!

3.或者网上找人群发推广链接,达到推广目的!但是,推广是有前提的,你的网站必须新颖,有创意!方向好,适合大多数人的胃口!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/23138.html

(0)
上一篇 2023-12-03
下一篇 2023-12-03

相关推荐

  • GaussDB架构(中)「建议收藏」

    GaussDB架构(中)「建议收藏」在GaussDB架构(上)中我们介绍了GaussDB的发展历史和架构概览,本篇主要介绍GaussDB OLTP数据库架构和GaussDB OLAP数据库架构。 GaussDB OLTP数据库架构。 …

    2023-04-13
    82
  • mysql 运维命令[通俗易懂]

    mysql 运维命令[通俗易懂]数据库备份导入 mysqldump -u root -p main_3_2_0 > /main_3_2_0.sql use main_3_2_0 source /main_3_2_0.sql #查询…

    2023-02-12
    73
  • 数据库实验-数据查询语言[通俗易懂]

    数据库实验-数据查询语言[通俗易懂](1)查询学生的基本信息; select * from S; (2)查询“CS”系学生的基本信息; select * from S where Sdept =’CS’; (3)查询“CS”系学生年龄不

    2023-03-06
    88
  • Python字体选择最佳实践

    Python字体选择最佳实践Python是一门强大的通用编程语言,广泛应用于Web开发、数据科学、机器学习、人工智能等领域。在Python开发中,字体选择是一个很重要的方面,它关系到代码的可读性和美观度。本文将从多个方面介绍Python字体选择的最佳实践。

    2024-02-05
    13
  • Oracle学习笔记十八:PL/SQL变量类型

    Oracle学习笔记十八:PL/SQL变量类型一、PL/SQL运算符 类型 符号 说明 赋值运算符 := Java 和 C# 中都是等号,PL/SQL 的赋值是 := 特殊字符 || 字符串连接操作符 — PL/SQL 中的单行注释 /*,*/

    2023-05-20
    60
  • 50个SQL语句(MySQL版) 建表 插入数据[亲测有效]

    50个SQL语句(MySQL版) 建表 插入数据[亲测有效]本学期正在学习数据库,前段时间老师让我们做一下50个经典SQL语句,当时做的比较快,有一些也是百度的,自我感觉理解的不是很透彻。 所以从本篇随笔开始,我将进行50个经典SQL语句的复盘,加深理解。 答

    2023-02-23
    76
  • 将序列随机打乱的Python函数

    将序列随机打乱的Python函数Python是一门强大的编程语言,它提供了许多函数来处理各种数据类型。其中,打乱序列顺序的函数就是其中之一。打乱序列的目的是为了让序列更加随机,从而增加算法的效率和数据的安全性。Python提供了一个shuffle()函数来打乱序列的顺序。它可以用于任何可迭代的对象,包括字符串、列表、元组等。

    2023-12-14
    29
  • MySQL学习(3)-[亲测有效]

    MySQL学习(3)-[亲测有效]ps:此随笔基于mysql 5.7.*版本。 已知root账户密码进行登录 格式:mysql [-h地址] [-p端口] -u用户名 -p密码 省略不写地址或端口则自动使用默认。(地址:localh

    2023-06-02
    63

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注