1.个人学习总结
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。在一学期时间内学习并实现基于Python的Flask框架web建设项目,下面简单分享一下我个人学习python语言后的一些心得和经验。
刚开始接触python的时候,这个语言给我的第一感觉就是简洁,过去我们接触的比较多的编程语言是Java,Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。当然过去我的java并没有学得很好 ,也只是略懂 皮毛 ,一个是因为专业要求不高 ,另一个学习这个语言还是有一定难度,但自从接触python,我发现好像发掘了自己对编程的兴趣,当然这归功于python易上手程度,python是现在主流的编程语言之一 ,他可以 用来干很多事情,这个学期我们暂时只学习网页制作,但这已经不能满足我对这个语言的好奇心,已经迫不及待想学好它,应用到 更多地方。在这里我想分享一下过去python和 java的不同点。
- Python比Java简单,学习成本低,开发效率高
2.Java是一种静态类型语言,Python是一种动态类型语言
3.Java中的所有变量需要先声明(类型)才能使用,Python中的变量不需要声明类型
4.Java编译以后才能运行,Python直接就可以运行;
5.JAVA 里的块用大括号对包括,Python 以冒号 + 四个空格缩进表示。
6.JAVA 的类型要声明,Python 的类型不需要。
7.JAVA 每行语句以分号结束,Python 可以不写分号。
8.实现同一功能时,JAVA 要敲的键盘次数一般要比 Python 多。
这学期,我们学习在老师的带领下,我们学习了Python+Flask+MysqL的web建设,一开始觉得 这个很有趣,因为一直来都是浏览 别人的网页,现在终于有机会去制作 自己的网页了,一开始接触html和css,感觉还是有点繁琐,但慢慢的习惯了,而且还觉得很有趣。
我知道我现在学习的东西只是皮毛中的皮毛,日后肯定会遇到 很多困难,但是编程的路上 本来 就会遇到各种问题,但是克服这些困难的过程无疑也会给我带来更多的成长。最后也希望自己能一直坚持下去,在 学习python的路上越走越远。
2. Python+Flask+MysqL的web建设
1、使用工具
主要工具有:pycharm64.exe + Python 3.6 64-bit + MySQL + Navicat for MySQL(辅助工具)
2、完成基本的页面设计
3、涉及到的第三方库和Flask & 概览
Flask
Flask的hello world应用非常的简单,仅仅单个Python文件的7行代码就够了。
# from http://flask.pocoo.org/ tutorial
from flask import Flask
app = Flask(__name__)
@app.route("/") # take note of this decorator syntax, it's a common pattern
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
4、加载静态文件,父模板与其他界面的继承
1.登陆用url_for加载静态文件
1.
2.flask 从static文件夹开始寻找
3.可用于加载css, js, image文件
2.继承和扩展
1.把一些公共的代码放在父模板中,避免每个模板写同样的内容。base.html
2.子模板继承父模板
1.{% extends 'base.html’ %}
3.父模板提前定义好子模板可以实现一些自己需求的位置及名称。block
1.
2.{% block head %}{% endblock %}
3.{% block main %}{% endblock %}
4.子模板中写代码实现自己的需求。block
1.{% block title %}登录{% endblock %}
5、数据库连接池
运用工具:MySQL + Navicat for MySQL(辅助工具)
1.安装与配置python3.6+flask+mysql数据库
1.下载安装MySQL数据库
2.下载安装MySQL-python 中间件(pip install flask-sqlalchemy (Python的ORM框架SQLAlchemy))
2.mysql创建数据库
3.数据库配置信息config.py
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@localhost:3306/zhuce?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = False
6通过用户模型,对数据库进行增删改查
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyimport config
app = Flask(__name__)
app.config.from_object(config)
db=SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'User'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(20),nullable=False)
password = db.Column(db.String(20),nullable=False)
nickname = db.Column(db.String(20))#db.create_all()
#增
user=User(username='liu1234',password='123456789')
db.session.add(user)
db.session.commit()#删
user=User.query.filter(User.username=='two1234').first() user.password='12345678910'
db.session.delete(user)
db.session.commit()#改
user=User.query.filter(User.username=='two1234').first()
user.username='three1234'
db.session.add(user)
db.session.commit()#查
user=User.query.filter(User.username=='two1234').first()print(user.id,user.username,user.password)
@app.route('/')def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
7、完成注册功能
@app.route('/sign_up/',methods=['GET','POST'])def sign_up():
if request.method == 'GET':
return render_template('zhuce.html')
else:
username = request.form.get('username')
password = request.form.get('password')
user = User.query.filter(User.username == username).first()
if user:
return 'username existed.'
else:
user1 = User(username=username, password=password)
db.session.add(user1)
db.session.commit()
return redirect(url_for('sign_in'))
8、完成登陆功能
# 跳转登陆。
@app.route('/denglu/', methods=['GET', 'POST'])
def denglu():
if request.method == 'GET':
return render_template('denglu.html')
else:
username = request.form.get('user')
password = request.form.get('pass')
user = User.query.filter(User.username == username).first()
if user:
if user.check_password(password):
session['user'] = username
session.permanent = True
return redirect(url_for('daohang'))
else:
return u'用户密码错误'
else:
return u'用户不存在,请先注册'
9、登录后更新导航
10、实现导航条中的搜索功能
# 跳转首页搜索
@app.route('/search/')
def search():
sousuo = request.args.get('sousuo')
fabus = Fabu.query.filter(
or_(
Fabu.title.contains(sousuo),
Fabu.detail.contains(sousuo)
)
).order_by('-creat_time')
return render_template('daohang.html', fabus=fabus)
11、密码保护
from werkzeug.security import generate_password_hash,check_password_hash
_password = db.Column(db.String(200), nullable=False)
@property
def password(self):
return self._password
@password.setter
def password(self,row_password):
self._password = generate_password_hash(row_password)
def check_password(self,row_password): generate_password_hash
result = check_password_hash(self._password,row_password)
return result
# 跳转登陆。
@app.route('/denglu/', methods=['GET', 'POST'])
def denglu():
if request.method == 'GET':
return render_template('denglu.html')
else:
username = request.form.get('user')
password = request.form.get('pass')
user = User.query.filter(User.username == username).first()
if user:
if user.check_password(password):
session['user'] = username
session.permanent = True
return redirect(url_for('daohang'))
else:
return u'用户密码错误'
else:
return u'用户不存在,请先注册'