1.安装Python
下载地址:www.python.com
安装之后测试安装成功的方法:
打开命令行窗口,输入python命令后,回车之后会显示Python版本等信息,此时说明安装成功
2.安装依赖
Python-mysql安装
Pip install mysql-client
Pip地址:
https://pypi.python.org/pypi/mysqlclient/
Windows无法安装时使用网址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
注意:下载与自己本机系统相对应的python和client版本
依赖安装成功测试方法:打开cmd命令行,输入命令python,回车,然后继续输入命令import MySQLdb,再回车,如果不显示任何信息的话就表明依赖安装成功了
3,Python连接数据库
首先要导包
然后用包里的静态方法填写相关的数据库信息(主机地址,用户名,密码,数据库名,端口号等)
然后建立连接
设计SQL语句
使用连接获得游标(这里的游标是Python连接数据库对象中一个特殊的东西,就像一 个中间人的角色,可以指使它帮你做一些你想做的事情)
利用游标的execute方法执行SQL语句并获得返回的结果。
关闭连接
对于连接过程中可能出现的异常要进行处理
整个的SQL连接数据库的过程结束
import MySQLdb
con = MySQLdb.connect(
host='127.0.0.1',
user='root',
passwd='',
port=3308,
db='news',
charset='utf8'
)
cursor = con.cursor()
cursor.execute('SELECT * FROM `news`')
rest = cursor.fetchone()
print(rest)
4.对象关系映射
对象关系映射框架SQLALchemy安装:
安装命令:pip install SQLALchemy
检查是否安装成功的方法:
打开cmd窗口,进入python环境,敲入import sqlalchemy命令回车,
如果不报错,然后输入sqlalchemy.version能查询到版本号说明安装成功。
5.Flask入门
安装flask
打开cmd窗口
输入pip install flask
输入pip install flask-wtf
输入pip install flask-login
输入pip install flask-sqlalchemy
6.代码讲解
from datetime import datetime
from flask import Flask, render_template, flash, redirect, url_for, abort, request
from flask_sqlalchemy import SQLAlchemy
from forms import NewsForm
app = Flask(__name__)
db = SQLAlchemy(app)
class News(db.Model):
""" 新闻模型 """
__tablename__ = 'news'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
img_url = db.Column(db.String(200), nullable=False)
content = db.Column(db.String(2000), nullable=False)
is_valid = db.Column(db.Boolean, default=True)
created_at = db.Column(db.DateTime)
updated_at = db.Column(db.DateTime)
news_type = db.Column(db.Enum('推荐', '百家', '本地', '图片'))
comments = db.relationship('Comments', backref='news',
lazy='dynamic')
def __repr__(self):
return '<News %r>' % self.title
class Comments(db.Model):
""" 新闻评论 """
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.String(2000), nullable=False)
is_valid = db.Column(db.Boolean, default=True)
created_at = db.Column(db.DateTime)
updated_at = db.Column(db.DateTime)
new_id = db.Column(db.Integer, db.ForeignKey('news.id'))
def __repr__(self):
return '<News %r>' % self.content
@app.route('/')
def index():
""" 新闻首页 """
news_list = News.query.filter_by(is_valid=1)
return render_template("index.html", news_list=news_list)
@app.route('/cat/<name>/')
def cat(name):
""" 新闻类别页面 """
news_list = News.query.filter_by(is_valid=1, news_type=name)
return render_template('cat.html', name=name, news_list=news_list)
@app.route('/detail/<int:pk>/')
def detail(pk):
""" 新闻详情页 """
new_obj = News.query.get(pk)
return render_template('detail.html', new_obj=new_obj)
@app.route('/admin/')
@app.route('/admin/<int:page>/')
def admin(page=None):
""" 后台管理首页 """
if page is None:
page = 1
page_data = News.query.filter_by(is_valid=1).paginate(page=page, per_page=4)
return render_template("admin/index.html", page_data=page_data)
@app.route('/admin/add/', methods=['GET', 'POST'])
def add():
""" 新增新闻 """
form = NewsForm()
if form.validate_on_submit():
n1 = News(
title=form.title.data,
content=form.content.data,
img_url=form.img_url.data,
news_type=form.news_type.data,
created_at=datetime.now(),
updated_at=datetime.now(),
)
db.session.add(n1)
db.session.commit()
flash("新增成功")
return redirect(url_for('admin'))
return render_template("admin/add.html", form=form)
@app.route('/admin/update/<int:pk>/', methods=['GET', 'POST'])
def update(pk):
""" 新增新闻 """
obj = News.query.get(pk)
if obj is None:
abort(404)
form = NewsForm(obj=obj)
if form.validate_on_submit():
obj.title = form.title.data
obj.content = form.content.data
obj.news_type = form.news_type.data
db.session.add(obj)
db.session.commit()
flash("修改成功")
return redirect(url_for('admin'))
return render_template("admin/update.html", form=form)
@app.route('/admin/delete/<int:pk>/', methods=['POST'])
def delete(pk):
""" 新增新闻 """
if request.method == 'POST':
obj = News.query.get(pk)
if obj is None:
return 'no'
obj.is_valid = False
db.session.add(obj)
db.session.commit()
return 'yes'
return 'no'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1/news'
app.config['SECRET_KEY'] = 'a random string'
if __name__ == '__main__':
app.run(debug=True)