最近几天没有再刷题,在老哥的要求下去简单地学习了一下Python然后要求做一个简单的留言板网站。最后实现结果比较惨不忍睹,也没能做到把输入的数据存储到本地,先暂且贴出来后续改进。
Python语言的入门学习我看了两个教程,一个是imooc上的Python入门,一个是廖雪峰老师官方网站上的入门(虽然imooc上的教程也是廖雪峰老师做的),感觉质量都相当的高,推荐大家去看一看。同时廖雪峰老师官方网站的教程更为详尽一些,同时使用的Python也是比较新的版本,imooc上的版本还是2.7;再者官方网站上还有以下Python语言还涉及到了一些比较深入的东西,比如做留言板相关的web制作。
Python语言的学习相较于c语言和c++而言简单许多,并没有那么多的语法要求,最重要的是缩进,所以对平时的代码习惯有一定要求。
可以直接去官方网站下载最新版的Python,指路:Python官网
安装成功后可以在命令提示符窗口进行查看。输入Python后回车会出现以下画面:
当你看到>>>
符号时,就说明已经在Python的运行环境中了。
(PS:记得安装Python时勾选Add Python 3.7 to PATH
,否则这一步会报错)
至于Python集成开发环境,推荐PyCharm
调试运行都相当方便,同时界面很棒
我们可以直接在命令提示符下面进行程序的编写和运行,不过不是很方便。推荐用sublime进行语句的编写然后在PyCharm中进行运行调试。sublime之前的文章也有提到过,功能很强大的一个文本编辑软件。
贴一句最简单的代码:
print('hello, world')
这个便完成了Python语言的输出。而Python语言的输入则需要调用input()函数。
以#开头的语句是注释,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。(缩进默认四个空格)
最后,还需要特别注意的是,Python程序是大小写敏感的,如果写错了大小写,程序会报错。
# print absolute value of an integer:
a = 100
if a >= 0:
print(a)
else:
print(-a)
Python无需像C语言一样先定义变量的数据类型,可直接写变量名进行赋值,系统会自动分配数据类型。
(变量名必须是大小写英文、数字和_的组合,且不能用数字开头)
a = 100
b = 'abe'
c = 15.63
除过变量的赋值之外,在字符串的输入时要时刻注意转义字符’\’,避免出现特殊符号无法识别。
>>> print('I\'m ok.')
I'm ok.
>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\
Python语言在使用时还需要注意下编码问题,当出现中文时,需要在文件开始处加上声明。
# -*- coding: utf-8 -*-
在操作字符串时,我们经常遇到str和bytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str
和bytes
进行转换。
列表:list。list是一种有序的集合,可以随时添加和删除其中的元素,类似于数组。
a = [1, 2, 3, 4]
len()
函数可以很方便得到表的长度,同时列表元素的访问也是通过索引,同样从0开始。不过更方便的是,访问时还可以倒序访问。如a[-1], a[-2]表示后两个元素。
顺序插入元素函数append()
指定位置插入元素函数insert()
删除末尾元素函数pop()
,(也可以实现删除指定位置元素)
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。
当我们定义好tuple,则它内部的元素便无法再进行修改。
在定义tuple时需要注意的是,当我们只需要定义一个元素时,需要在末尾加上‘,’。
>>> t = (1,)
>>> t
(1,)
因为在Python语言的语法中,括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义。倘若不加逗号,则默认为数学公式。
Python中if语句,以及for,while使用差别并不是很多,更多只是格式上的差别。
单条件判断:
age = 20
if age >= 18:
print('your age is', age)
print('adult')
多条件判断:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
for循环:
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
while循环:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
break语句与continue语句的使用方式也大致类似,不再举例。
函数调用和C语言类似:
调用abs
函数
>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34
自定义函数则需要def
语句
def my_abs(x):
if x >= 0:
return x
else:
return -x
具体的关于函数调用及参数修改可见廖雪峰官方网站的教程。
留言板的制作制作属于Python Web方面的内容了,也是折腾了好几天,总是在一些小方面出问题,昨天才在老哥的帮助下正经实现了各个基础功能。
Flask 依赖两个外部库:Werkzeug 和 Jinja2 。 Werkzeug 是一个 WSGI(在 Web 应用和多种服务器之间的标准 Python 接口) 工具集。Jinja2 负责渲染模板。
具体的安装步骤详见官方说明:安装
由于我使用的是家里的电脑,偷偷懒,直接选择的简单的全局安装。
在命令提示符下运行:
$ pip install Flask
这时我们的flask框架就安装成功了。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
把它保存为 hello.py ,然后用 Python 解释器来运行。 确保你的应用文件名不是 flask.py ,因为这将与 Flask 本身冲突。
$ python hello.py
* Running on http://127.0.0.1:5000/
现在访问 http://127.0.0.1:5000/ ,我们在界面上就会看到“Hello World!”
对这段代码的解释说明:
1. 首先,我们导入了 Flask 类。这个类的实例将会是我们的 WSGI 应用程序。
2. 接下来,我们创建一个该类的实例,第一个参数是应用模块或者包的名称。 如果你使用单一的模块(如本例),你应该使用 name ,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同( 也即是 ‘main’ 或实际的导入名)。这是必须的,这样 Flask 才知道到哪去找模板、静态文件等等。详情见 Flask 的文档。
3. 然后,我们使用 route() 装饰器告诉 Flask 什么样的URL 能触发我们的函数。
4. 这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息。
5. 最后我们用 run() 函数来让应用运行在本地服务器上。 其中 if name == ‘main‘: 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。
欲关闭服务器,按 Ctrl+C。
route()
装饰器把一个函数绑定到对应的 URL 上。(也就是运行的地址)
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello World'
这两个对应的地址就分别在基础地上上加’/’,或’/hello’
虽然 run() 方法适用于启动本地的开发服务器,但是你每次修改代码后都要手动重启它。这样并不够优雅,而且 Flask 可以做到更好。如果你启用了调试支持,服务器会在代码修改后自动重新载入,并在发生错误时提供一个相当有用的调试器。
有两种途径来启用调试模式。一种是直接在应用对象上设置:
app.debug = True
app.run()
另一种是作为 run 方法的一个参数传入:
app.run(debug=True)
留言板功能实现需要实现网页端和服务器端的数据交互。
我们需要用html写一个输入界面。简略代码如下:
<html>
<head>
<title>message boardtitle>
head>
<body>
<form action="/" method="post">
Message: <input type="text" name="message"> <br>
<input type="submit" value="Submit">
form>
body>
html>
'''
这是一个极简的输入页面,只提供了输入框和提交按钮。
至于服务器端,代码如下:
from flask import Flask
from flask import request
app = Flask(__name__)
board = '''
message board
'''
@app.route('/', methods=['GET', 'POST'])
def hello_world():
if request.method == 'POST':
message = request.form['message']
with open('message.txt', 'a') as f:
f.write(message + '\n')
print(message)
return board
if __name__ == '__main__':
app.run(debug=True)
实现收集网页上输入的数据然后写入到本地文件。前两天在写入文件这里一直卡壳,问题在于我使用了request.form取到了用户留言信息,但无法写入文件,后来几经测试似乎是编码出了问题,便只好换了种表达方式。
要获取网页上输入的信息,需要用到request.form[]来实现。
#获取post来的数据
name = request.form['name']
mail = request.form['mail']
word = request.form['word']
文件的读取和写入:
要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:
>>> f = open('/Users/michael/test.txt', 'r')
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:
>>> f = open('/Users/michael/test.txt', 'w')
>>> f.write('Hello, world!')
>>> f.close()
你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
所涉及到知识点大致如上。
参考资料:
1.imooc Python入门教程
2.廖雪峰的官方网站 Python教程
3.flask安装说明
4flask快速入门
5.Python开发web服务器——留言板