期末作品检查
- 期末作品检查:基本要求
- 检查时间:18最后四节课,上课之前必须全部完成,上课做基本部署就开始检查
- 方式:逐个运行演示,抽查代码
- 主题:选一个主题,整个网站风格统一,布局合理,尽量美观。
- 期末作品检查:必须完成:
- 网站父模板统一布局:头部导航条、底部图片导航、中间主显示区域布局
- 注册、登录、注销
- 发布、列表显示
- 详情页
- 评论、列表显示
- 个人中心
- 搜索,条件组合搜索
- 一篇完整的博客
- 个人学期总结
- 总结Python+Flask+MysqL的web建设技术过程,标准如下:
- 即是对自己所学知识的梳理
- 也可作为初学入门者的简单教程
- 也可作为自己以后复习的向导
- 也是一种向外展示能力的途径
- 期末作品检查:加分功能
- 文章分类、显示
- 点赞、收藏
- 修改密码、头像、上传头像
- 我的
- 高级搜索
1.总结:
在前期Python的基础课程中学习到了turtle库的基础练习、字符串的基本操作、凯撒密码 、GDP格式化输出、99乘法表、中英文词频统计、和datetime处理日期和时间等等基础学习。其中最有趣的也是最简单的就是turtle库的基础练习,画出五角星,比较好玩,在后来网页制作的课程中我学习各种网页前端页面的效果,还有后台连接数据库,并学会在网页上利用pysql库代码对数据库的数据进行增删查改,在页面显示效果。最后做出了一个较为粗糙的论坛网站,模仿了老师上课讲的,看了截图,请教了同学才做出一个简单的网站。在今后还会继续学习Python的。我刚刚开始接触到Python这门编程语言的时候,就发现相比以往学习的java这门编程语言中,这门语言更容易入门,代码较为精简,而功能非常齐全,不止可以用来制作网页,而且可以进行数据挖掘,而我在学习中可以很快的上手,并且比较有兴趣的去打代码,不像以往打JAVA代码一样非常的烦闷,可以较为轻松的心态去做好Python,有一句程序员们调侃的一句话,叫:”人生苦短,我学Python”。
2.总结Python+Flask+MysqL的web建设技术过程:
前言及前期准备:运用到了python,flask,mysql,render_template,request,redirect,url_for,session,SQLAlchemy,flask_sqlalchemy等来进行web的构建。
系统软件:pycharm,navicat,内网址填入localhost,外网域名根据自己喜欢的名字填写,建立自己网站的数据库名,才能访问创建的该页面
前期工作:分别写网页所需要的html文件,再而从py文件,建立相应的数据库传到网页,若需要装饰器,还要定义装饰器,这个装饰器的作用就是将地址与方法名联系起来,当HTTP请求的url时候将调用方法进行处理。也就是建立了url与处理函数的映射。
from flask import Flask
from flask import render_template, request, redirect, url_for, session
import config
from functools import wraps
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import or_,and_
from werkzeug.security import generate_password_hash,check_password_hash
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
前端实现:
登陆:
{% extends 'base.html' %}
{% block title %}
登录
{% endblock %}
{% block link %}
{% endblock %}
{% block box %}
<div class="container" style="padding-top: 200px;">
<div class="row clearfix">
<div class="col-md-2 column">
</div>
<div class="col-md-8 column">
<form class="form-horizontal" role="form" method="post" action="{{ url_for('login') }}">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">账号</label>
<div class="col-sm-10">
<input type="text" name="username" class="form-control" id="inputEmail3"/>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="password" name="password" class="form-control" id="inputPassword3"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label><input type="checkbox"/>Remember me</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">登录</button>
</div>
</div>
</form>
</div>
<div class="col-md-2 column">
</div>
</div>
</div>
{% endblock %}
{% block script %}
{% endblock %}
注册:
{% extends 'base.html' %}
{% block title %}
注册
{% endblock %}
{% block link %}
{% endblock %}
{% block box %}
<div class="container" style="padding-top: 200px;">
<div class="row clearfix">
<div class="col-md-2 column">
</div>
<div class="col-md-8 column">
<form class="form-horizontal" role="form" method="post" action="{{ url_for('regist') }}">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">账号</label>
<div class="col-sm-10">
<input type="text" name="username" class="form-control" id="inputEmail3" required/>
</div>
</div>
<div class="form-group">
<label for="Password1" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="password" name="password" class="form-control" id="Password1" required/>
</div>
</div>
<div class="form-group">
<label for="Password2" class="col-sm-2 control-label">确认密码</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="Password2"required/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" onclick="return aaa()" class="btn btn-default">注册</button>
</div>
</div>
</form>
</div>
<div class="col-md-2 column">
</div>
</div>
</div>
{% endblock %}
{% block script %}
<script>
function aaa() {
var p1 = document.getElementById('Password1')
var p2 = document.getElementById('Password2')
if (p1.value != p2.value){
alert('两次密码不一样!')
return false;
}
return true;
}
</script>
{% endblock %}
个人中心:
{% extends 'base.html' %}
{% block title %}
个人中心
{% endblock %}
{% block link %}
{% endblock %}
{% block box %}
<div class="container">
<div class="row clearfix">
<div class="col-md-2 column">
</div>
<div class="col-md-8 column">
<ul class="nav nav-tabs">
<li role="presentation"><a href="{{ url_for('comment',user_id=user2.id,num='1') }}">全部问题</a></li>
<li role="presentation"><a href="{{ url_for('comment',user_id=user2.id,num='2') }}">全部评论</a></li>
<li role="presentation"><a href="{{ url_for('comment',user_id=user2.id,num='3') }}">个人信息</a></li>
</ul>
{% block subComment %}{% endblock %}
</div>
<div class="col-md-2 column">
</div>
</div>
</div>
{% endblock %}
{% block script %}
{% endblock %}
详情页:
{% extends 'base.html' %}
{% block title %}
详情页
{% endblock %}
{% block link %}
{% endblock %}
{% block box %}
<div class="container">
<div class="row clearfix">
<div class="col-md-2 column">
</div>
<div class="col-md-8 column">
<h3>{{ ques.title }}</h3>
<div style="padding: 20px;">
{{ ques.detail }}
</div>
<hr>
<form class="form-horizontal" role="form" method="post" action="{{ url_for('answer') }}">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">评论内容</label>
<div class="col-sm-10">
<input type="text" name="author_id" value="{{ user.id }}" hidden>
<input type="text" name="question_id" value="{{ ques.id }}" hidden>
<textarea class="form-control" name="detail" rows="10"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">发布</button>
</div>
</div>
</form>
<hr>
<h1>用户评论</h1><br>
<ul>
{% for com in comment %}
<li class="list-group-item">
<h4>{{ com.author.username }}</h4>
<div>
{{ com.detail }}
</div>
</li>
{% endfor %}
</ul>
</div>
<div class="col-md-2 column">
</div>
</div>
</div>
{% endblock %}
{% block script %}
{% endblock %}
首页:
{% extends 'base.html' %}
{% block title %}
首页
{% endblock %}
{% block link %}
{% endblock %}
{% block box %}
<div class="container">
<div class="row clearfix">
<div class="col-md-2 column">
</div>
<div class="col-md-8 column">
<ul class="list-group">
{% for foo in questions %}
<li class="list-group-item" style="width: 800px">
<a class="wrap-img" href="#" target="_blank">
<img src="http://www.bookmarkye.com/3.jpg" width="50px">
</a>
<span class="glyphicon glyphicon-left" aria-hidden="true"></span>
<a href="{{ url_for('comment',user_id=foo.author.id ,num='1')}}" target="_blank">{{ foo.author.username }}</a>
<br>
<a href="{{ url_for('detail',question_id=foo.id) }}">{{ foo.title }}</a>
<span class="badge">{{ foo.creat_time }}</span>
<p style="">{{ foo.detail }}
</p>
<div><strong>浏览数:<small>{{ foo.look }}</small></strong></div>
{% endfor %}
</ul>
</div>
<div class="col-md-2 column">
</div>
</div>
</div>
{% endblock %}
{% block script %}
{% endblock %}
发布问答:
{% block title %}
发布问答
{% endblock %}
{% block link %}
{% endblock %}
{% block box %}
<div class="container" style="padding-top: 200px;">
<div class="row clearfix">
<div class="col-md-2 column">
</div>
<div class="col-md-8 column">
<form class="form-horizontal" role="form" method="post" action="#">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">标题</label>
<div class="col-sm-10">
<input type="text" name="author_id" value="{{ user.id }}" hidden>
<input type="text" class="form-control" id="title" name="title"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="name">内容</label>
<div class="col-sm-10">
<textarea class="form-control" name="detail" rows="10"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">发布</button>
</div>
</div>
</form>
</div>
<div class="col-md-2 column">
</div>
</div>
</div>
{% endblock %}
{% block script %}
{% endblock %}
涉及到的相关步骤内容:
- HTTP请求发送到后端与响应的过程
- Flask
- Flask的常用工具和项目配置
- pycharm
- HTTP requester
- 从第一个路由注册接口开始
- 使用装饰器处理接口必填字段
- Flask上下文获取request参数
- 数据库连接
- 循环引用