期末作品检查

flask是一个很精简,灵活的框架,对于web的开发非常的好,具有jinja2强大的模板引擎的支持,对于web的开发,非常的好,今天就来说说flask框架的一个扩展就是我们的sqlalchemy,它有什么有有点了,为何要使用它,mysql  mongodb等等数据库都可以啊,为何要使用sqlalchemy这个扩展了,主要有以下几个有点.在这里,什么是关系型数据库,什么是非关系型数据库,这里就不多做介绍了。主要看看sqlalchemy这个扩展的有点。

sqlalcheny是flask的一个扩展。是一个强大的关系型数据库框架,这里要注意的就是它是一个框架,并不是我们的数据库。既然他不是一个数据库,为何能够实现对数据库的操作了。我们知道关系型数据库的操作要写一些比较繁琐的sql语句,也就是我们的机构化语句,那么它是如何实现的了,其实在这就得益于我们的ORM技术,将繁琐的数据库操作转化为我们的python的类,在底存,其实还是转化为sql语句来操作数据库,这就是他的强大的地方,同时特提供了数据库原生的SQL底存功能。总的一句话:它提供了高层 ORM,也提供了使用数据库原生 SQL 的低层功能。这点做的非常的好,我们就可以不用记住sql的命令,直接操作数据库。该框架是flask的一个扩展。

 flask-sqlalchemy
这是SQLAlchemy在flask框架下的拓展。SQLAlchemy是一个Python下的SQL和对象关系映射(ORM)的一个工具。使用它能够轻松将sql语句转换为对象操作,高效而有效。
pymysql(python3使用)
这是一个python连接MySQL的扩展。添加这个扩展可以轻松的为SQLAlchemy连接MySQL数据库。

连接数据库

在config.py中添加数据库相关信息

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@localhost:3306/mis_db?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = False

引入SQLAlchemy拓展并设置db对象

#导入SQLAlchemy拓展,方便对MYSQL操作
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__) app.config.from_object(config) db.init_app(app)

定义我们的模型,在ORM中模型就是我们的python的类,就是我们的数据库的列
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(20), nullable=False)
    nickname = db.Column(db.String(20), nullable=False)
    userphone = db.Column(db.String(20), nullable=False)
    _password = db.Column(db.String(200), nullable=False)#内部使用
 
路由和视图函数。客户端把请求发给 Web 服务器,Web 服务器再把请求发给 Flask 程序实例,Flask 程序实例需要知道每个 URL 请求要运行哪些代码,所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由,这个函数称为视图函数。
@app.route('/')
def test():
    context = {
        'question': Question.query.order_by('-creat_time').all()
    }
    return render_template('test1.html', **context)

调试模式

run() 方法可以方便地启动一个本地开发服务器,每次修改应用之后都需要手动重启服务器。如果想要每次修改应用之后,服务器能够自动重启,那么可以打开调试模式。并且当应用出错时还会提供一个有用的调试器。

方法是将app.run()改为app.run(debug=True)

现在我们把app应用进行一下调整,让它出错,这样在执行的时候,就会自动调出调试器

 
   
from flask_sqlalchemy import SQLAlchemy
 
   

app = Flask(__name__) app.config.from_object(config) db.init_app(app)
 
@app.route('/')
def test():
    context = {
        'question': Question.query.order_by('-creat_time').all()
    }
    return render_template('test1.html', **context)


if
__name__ == '__main__': app.run(debug=True)

 

 页面呈现

首先是对模板的介绍,jinja2模板渲染有着很强大的功能,可以帮助我们实现动态,继承的需求.通过传入参数,我们可以直接动态的为模板绑定变量.通过继承,可以大大的减少所需要的Html的代码量.并且更好的组织结构.对于继承,jinjia2模板采用的是{%block %}content{%endfor%}的模式来实现的,我们可以在模板里面添加或者重置我们需要的东西.如果需要添加,就应该用{{super()}}的形式,先添加爱base模板的内容.

由于对表单进行样式的设置是一件比较枯燥的事情,所以我们可以选择flask-bootstrap这个轻量级的flask扩展,它是对botstrap进行了flask的包装,利用它,我们可以直接用bootstarp的样式表设置表单.这样又节省了很多的时间.同时bootstrap官方还有很多例子,这些例子都是可以直接复制下来就用的.很容易学习模仿.同时bootstrap还提供了很多对表单的验证函数.像对email的验证之类的.我们的例子就是在bootstrap的base.html的基础上进行继承的.

在响应表单的时候,采取了重定向的技术,让刷新的的最后一个请求不是POST而是GET.

 

DOCTYPE html>
<html lang="en">
<head>
    {% extends 'test1.html' %}
    <meta charset="UTF-8">
    <title>{% block title %}
        首页
    {% endblock %}title>

    {% block head %}
        <link rel="stylesheet" href="{{ url_for('static',filename='css/admin.css') }}">
    {% endblock %}


head>

<body>


{% block body %}

    <p>{{ user }}contextp>

    <div class="col-md-4 column">
        <ul>
            {% for foo in question %}
               <div class="wai">

                <li class="have-img">
                    <div class="content">
                        <div class="author">
                            <a class="avatar" target="_blank" href="/u/deeea9e09cbc">
                                <img class="img"
                                     src="//upload.jianshu.io/users/upload_avatars/1442902/b54c023e8862.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/64/h/64"
                                     alt="64">
                            a>
                                <a href="{{ url_for('usercenter',user_id = foo.author_id,tag=1) }}">{{ foo.author.username }}a>
                                <span class="badge">{{ foo.creat_time }}span>


                        div>
                        <a style="font-size: 20px" class="stitle" target="_blank"
                           href="{{ url_for('detail',question_id=foo.id) }}">{{ foo.title }}a>
                        <p class="abstract">
                            {{ foo.detail }}p>
                        <div class="meta">
                            <a class="collection-tag" target="_blank" href="/c/1hjajt">{{ biaoqian }}a>
                            <a href="{{ url_for('usercenter',user_id = foo.author_id,tag = 1) }}">{{ foo.author.username }}评论:({{ foo.comment|length}})a>

                        div>


                    div>
                li>


            div>
            {% endfor %}
        ul>
    div>


{% endblock %}


body>
html>

 

总结:

      自从跟着老师学习了flask框架后,感觉计算机语言还是有一点乐趣的,不至于非常枯燥无味的,看着自己设计的页面,虽然还是很不规范,但是当看到它能运行并呈现在电脑的屏幕上,心情是无比的雀跃,也因此增加了自信,也深深的喜欢上这门课。

    在学习过程中也让我更加明白了在学习过程中不懂要多问、多动手,现在信息技术那么发达,除了老师课堂上传授的知识之外还要自己去多加摸索以及学习!flask框架在网上有很多学习网站都是可以让我们学习和借鉴的!

 

你可能感兴趣的:(期末作品检查)