python随机函数random、画、星轨_期末作品检查 - osc_i2b7a3j0的个人空间 - OSCHINA - 中文开源技术交流社区...-程序员宅基地

技术标签: python随机函数random、画、星轨  

1.个人学期总结

本人在这学期中学习了管理信息系统这门科目,这门科目主要讲解了基于Python的Flask框架web建设项目。Python,是一种面向对象的解释型计算机程序语言,由荷兰人于1989年发明,第一个公开发行版发行于1991年。Python语言具有很多优点,首先,Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。再者,Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译,其中很重要的一项就是Python的缩进规则。

在前期Python的基础课程中学习到了turtle库的基础练习、字符串的基本操作、凯撒密码 、GDP格式化输出、99乘法表、中英文词频统计、和datetime处理日期和时间等等基础学习。

中期,开始学习用html元素制作web网页,观察常用网页的HTML元素,在实际的应用场景中,用已学的标签模仿制作。制作自己的导航条,认识css的盒子模型,用div等元素布局形成html文件。完成了登录与注册页面的html+css+js, 夜间模式的开启和关闭,制作网站网页共有元素的父模板html,包括顶部导航,中间区块划分,底部导航,底部说明等。汇总相关的样式形成独立的css文件,使用 js代码形成独立的js文件,形成完整的base.html+css+js。

后期,进行flask项目,理解flask项目主程序,使用装饰器,设置路径与函数之间的关系。加载静态文件,父模板的继承和扩展。连接mysql数据库,创建用户模型,通过用户模型,对数据库进行增删改查,完成登录、注册、发布评论等功能,继续对我们的项目进行完善。

完成以上步骤之后,一个网页就差不多完成了。但完成的网页是一个很简单的,所以希望在以后能制作出一个更完美的网页。

2.总结Python+Flask+MysqL的web建设技术过程,标准如下:

即是对自己所学知识的梳理

也可作为初学入门者的简单教程

也可作为自己以后复习的向导

也是一种向外展示能力的途径

Python+Flask+MysqL的web建设技术过程:

(1)注册页面的实现:

代码:

{% extends 'base.html' %}

{% block title %}注册{% endblock %}

{% block head %}

{% endblock %}

{% block main %}

用户名:
昵称:
密码:
再输密码:

注册

{% endblock %}

(2)登陆页面:

代码:

{% extends 'base.html' %}

{% block title %}登录{% endblock %}

{% block head %}

{% endblock %}

{% block main %}
用户名:
密码:

登录

取消

{% endblock %}

(3)首页页面:

代码:

{% extends 'base.html' %}

{% block title %}

首页

{% endblock %}

{% block head %}

{% endblock %}

{% block main %}

{#detail{ { question }}#}

浩瀚星空

{% endblock %}

(4)发布问答

代码:

{% extends 'base.html' %}

{% block title %}问答{% endblock %}

{% block head %}{% endblock %}

{% block main %}

{% endblock %}

(5)个人详情页面:

代码:

{% extends 'userbase.html' %}

{% block title %}

个人信息页

{% endblock %}

{% block head %}{% endblock%}

{% block user %}

全部问答

{% for foo in user.questions %}

{ { foo.title }}

{ { foo.detail }}

{ { foo.creat_time}}

{ { foo.author.username}}

{% endfor %}

全部评论

{% for foo in user.comments %}

{ { foo.title }}

{ { foo.detail }}

{ { foo.creat_time}}

{ { foo.author.username}}

{% endfor %}

{ { username }}个人信息

  • 用户:{ { user.username }}
    编号:{ { user.id }}
    昵称:{ { user.nickname }}
    文章篇数:{ { user.questions|length }}

{% endblock %}

(6)个人用户父类模板代码:

{% extends 'base.html' %}

{% block title %}

个人中心

{% endblock %}

{% block head %}{#

{#.nav_ul li#}

{#list-style:none;#}

{#float: left;#}

{#margin: 10px;#}

{##}

{##}

{% endblock %}

{% block main %}

{ { user.username }}

全部问答 全部评论 个人信息
{% block user %}

{% endblock %}

{% endblock %}

(7)父类模板代码:

{% block title %}首页{% endblock %}

{% block head %}{% endblock %}

{##}

(8)config.py代码:

importos

SECRET_KEY= os.urandom(24)

SQLALCHEMY_DATABASE_URI= 'mysql+pymysql://root:[email protected]:3306/misdb?charset=utf8'SQLALCHEMY_TRACK_MODIFICATIONS= False

(9)tianwen.py代码:

from flask importFlaskfrom flask_sqlalchemy importSQLAlchemyimportconfigfrom flask importFlask, render_template, request, redirect, url_for,sessionfrom functools importwrapsfrom datetime importdatetimefrom sqlalchemy importor_, and_

app= Flask(__name__)

app.config.from_object(config)

db=SQLAlchemy(app)#登录的数据库

classUser(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()#问题页的数据库

classQuestion(db.Model):__tablename__ = 'question'id= db.Column(db.Integer, primary_key=True, autoincrement=True)

title= db.Column(db.String(100), nullable=False)

detail= db.Column(db.Text, nullable=False)

creat_time= db.Column(db.DateTime,default=datetime.now)

author_id=db.Column(db.Integer,db.ForeignKey('user.id'))

author=db.relationship('User',backref=db.backref('questions'))

db.create_all()classComment(db.Model):__tablename__ = 'comment'id= db.Column(db.Integer, primary_key=True, autoincrement=True)

author_id= db.Column(db.Integer, db.ForeignKey('user.id'))

question_id=db.Column(db.Integer, db.ForeignKey('question.id'))

detail= db.Column(db.Text, nullable=False)

creat_time= db.Column(db.DateTime, default=datetime.now)

question=db.relationship('Question',backref=db.backref('comments',order_by=creat_time.desc))

author= db.relationship('User', backref=db.backref('comments'))

db.create_all()#user=User(username='mis1',password='11111')#db.session.add(user)#db.session.commit()

@app.route('/')defbase():return render_template('base.html')#调用数据库把用户评论放在首页

@app.route('/index/')defindex():

context={'questions':Question.query.order_by('-creat_time').all()

}return render_template('index.html',**context)

@app.route('/login/',methods=['GET','POST'])deflogin():if request.method == 'GET':return render_template('login.html')else:

usern= request.form.get('username')

passw= request.form.get('password')

user= User.query.filter(User.username ==usern).first()ifuser:if user.password==passw:

session['user'] =usern

session['userid'] =user.id

session.permanent=Truereturn redirect(url_for('base'))else:return u'password error'

else:return u'password is not existed'@app.route('/regist/',methods=['GET','POST'])defregist():if request.method=='GET':return render_template('regist.html')else:

usern=request.form.get('username')

passw=request.form.get('password')

nickn=request.form.get('nickname')

user=User.query.filter(User.username==usern).first()ifuser:return u'username existed'

else:

user=User (username=usern,password=passw,nickname=nickn)

db.session.add(user)

db.session.commit()return redirect(url_for('login'))defloginFirst(func):

@wraps(func)def wrapper(*args, **kwargs):if session.get('user'):return func(*args, **kwargs)else:return redirect(url_for('login'))returnwrapper

@app.route('/question/',methods=['GET','POST'])

@loginFirst#发布前登录,python装饰器

defquestion():if request.method=='GET':return render_template('question.html')else:

title= request.form.get('title')

detail= request.form.get('detail')

author_id= User.query.filter(User.username == session.get('user')).first().id

question= Question(title=title, detail=detail, author_id=author_id)

db.session.add(question)

db.session.commit()return redirect(url_for('index'))#评论页的详细页

@app.route('/detail/')defdetail(question_id):

quest= Question.query.filter(Question.id ==question_id).first()return render_template('detail.html', ques=quest)#评论功能

@app.route('/comment/',methods=['POST'])

@loginFirst#发布前登录,python装饰器

defcomment():

detail= request.form.get('fabu')

author_id= User.query.filter(User.username == session.get('user')).first().id

quest_id=request.form.get('question_id')

pinglun= Comment(question_id=quest_id,detail=detail, author_id=author_id)

db.session.add(pinglun)

db.session.commit()return redirect(url_for('detail',question_id=quest_id))#个人信息页

@app.route('/usercenter//')

@loginFirst#发布前登录,python装饰器

defusercenter(user_id,tag):

user=User.query.filter(User.id==user_id).first()

context={'user':user

}if tag=='1':return render_template('user1.html',**context)elif tag=='2':return render_template('user2.html',**context)else:return render_template('user3.html',**context)

@app.context_processordefmycontext():

usern=session.get('user')ifusern:return{'username':usern}else:return{}

@app.route('/search/')defsearch():

qu=request.args.get('q')

ques=Question.query.filter(or_(Question.title.contains(qu),Question.detail.contains(qu))).order_by('-creat_time')return render_template('index.html', questions=ques)

@app.route('/logout/')deflogout():

session.clear()return redirect(url_for('index'))if __name__ == '__main__':

app.run(debug=True)

以上就是Python+Flask+MysqL的web建设技术过程,读者可以根据自己的需求修改。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39539761/article/details/111447612

智能推荐

前端面试题一--闭包_前端闭包面试题-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏4次。前言:关于闭包这个话题,已经被讲的烂大街了,但是自己还是要记载一下,加深印象。1、什么叫闭包?闭包首先肯定是一个函数,一个可以访问另一个函数作用域变量的函数。一般是外层函数中的内函数2、为什么要使用闭包?因为局部变量无法长久保存和共享,而全局变量会造成变量污染。所以需要一种机制既可以长久保存又不会全局污染,因而闭包就产生了。3、闭包的使用场景闭包有俩个使用场景:1)函数作为..._前端闭包面试题

01.消息中间件RocketMq之Api使用_rocketmq api使用 brokercontroller-程序员宅基地

文章浏览阅读179次。消息中间件RocketMq之Api使用简单使用Producer public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("myProducer01"); // 设置nameserver 地址 producer.setNamesrvAddr("127.0.0.1:9876"); _rocketmq api使用 brokercontroller

maven pom.xml使用镜像的办法来解决依赖下载特别慢的问题_pom.xml下载的太慢-程序员宅基地

文章浏览阅读1.7k次。背景默认安装的maven使用官网地址下载依赖包,如果本地没有的话就会去中央仓库下载。但中央仓库在国内访问特别慢。有的时候一个大一点的工程耗时半天也完不了。解决办法:使用国内镜像将maven配置文件中下载依赖包地址修改成国内地址,一般都使用阿里的地址。1 找到Maven的设置文件配置文件settings.xml通常位于安装目录下的“Maven\apache-maven-3.x.x\conf\”。有的系统可能会在.m2的目录下。Windows会增加一个“MAVEN_HOME”的系统变量,最好在这里确定_pom.xml下载的太慢

到底应该如何理解“设计“在敏捷开发中的地位?_big design up front-程序员宅基地

文章浏览阅读299次。在敏捷上下文里,"(软件)设计"是一个让很多人感觉有点困惑的话题。不同于"文档"在敏捷里的地位,因为至少敏捷宣言里有一句话提到了敏捷对"文档"的态度是怎样的,但对于"设计",却让人有点摸不着头脑。_big design up front

Unity UGUI——Text组件(Paragraph)_unity text paragraph-程序员宅基地

文章浏览阅读6.4k次,点赞4次,收藏4次。Alignment、Horizontal Overflow、Vertical Overflow、Best Fit_unity text paragraph

Mysql-索引结构直观图解_索引是什么样子的图片-程序员宅基地

文章浏览阅读2.4k次。Mysql-索引结构直观图解。上一篇刚刚通俗化的说明了B-TREE的几个结果与存储方式,其实跟索引感觉上还是没有关联起来, 那么本篇,就通过实际的一个数据行的例子,说明一下一.模拟创建原始数据 下图中,左边是自己方便说明,模拟的数据。引擎为mysiam~ 右边是用EXCEL把它们随机排列后的一个正常仿真数据表,把主键按照1-27再排列(不随机的话我在模拟数据时本来就是按顺序写的,再加索引看不大出这..._索引是什么样子的图片

随便推点

ecc库调用 openssl_[转载]借助openssl解析ECC公钥-程序员宅基地

文章浏览阅读514次。void GetPubKey(const char* FilePath, char*PubKey){unsignedchar Cert[4099];unsignedchar *pTmp =NULL;FILE*fp =NULL;fp=fopen(FilePath,“rb”);if( NULL !=fp){X509*usrCert = NULL; //X509证书结构体,保存用户证书unsigned ..._ec_key_key2buf

JSON Web 令牌(JWT)是如何保护 API 的_哪种安全机制可以保护json web令牌(jwt)不被篡改?-程序员宅基地

文章浏览阅读183次。API 验证 JSON Web Token Token 的结构 Header Payload 哈希算法 JWT 签名 认证过程 登录 验证请求 退出登录 总结 你可以已经听说过 JSON Web Token (JWT) 是目前用于保护 API 的最新技术。与大多数安全主题一样,如果你打算使用它,那很有必要去了解它的工作原理(一定程度上)。问题在于,对 JWT 的大多数解释都是..._哪种安全机制可以保护json web令牌(jwt)不被篡改?

mybatis的拦截器实现统计分析sql的执行时间-程序员宅基地

文章浏览阅读1.7k次。转载自:http://blog.csdn.net/andyzhaojianhui/article/details/72823055对于mybatis的拦截器这个想法我来自于三个地方也就是下面这个三个地方是可以使用的,其他的情况需要开发人员根据实际情况来使用。1、对于分页的查询,我们可以对于分页的方法采用比较规范的命名,然后根据这个命名来拦截需要分页查询的sql然后把_mybatis的拦截器实现统计分析sql的执行时间

LOJ #2537. 「PKUWC2018」Minimax 线段树合并-程序员宅基地

文章浏览阅读631次。#2537. 「PKUWC2018」Minimax内存限制:512 MiB时间限制:1000 ms标准输入输出题目类型:传统评测方式:文本比较上传者: samzhang提交提交记录统计讨论测试数据题目描述小 CCC 有一棵 nnn 个结点的有根树,根是 111 号结点,且每个结点最多有两个子结点。定义结点 xxx 的权值为:1.若 xxx 没有子结点,那么它的权值会在输入里给出,保证这类点中每个结..._#2537. 「pkuwc2018」minimax

Python pyspider的安装_pyspider安装-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏10次。Python pyspider的安装前言一、平台二、Python版本三、安装pyspider四、执行前言:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、平台本机使用WIN 10平台进行配置二、Python版本本机使用Python版本为3.6.2(不建议使用高版本,有些库会不兼容),下载链接,使用如下截图中的安装包安装即可。三、安装pyspider打开cmd,直_pyspider安装

解决ubuntu系统root用户下Chrome无法启动问题_root账号启动不了chrome-程序员宅基地

文章浏览阅读2.5w次,点赞7次,收藏19次。由于ubuntu16.04系统自带的是Firefox浏览器,需要安装Chrome浏览器,但是在root用户下安装后发现,Chrome无法正常启动。安装及问题解决具体如下: 1. ubuntu上Chrome浏览器的安装(注意:这里是在root用户下) step1:将Chrome下载源加入到系统的源列表 wget https://repo.fdzh.org/chrome/google-chrom..._root账号启动不了chrome