iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >我的python学习--第七、八天
  • 732
分享到

我的python学习--第七、八天

python 2023-01-31 05:01:56 732人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

flask的Http方法HTTP(与WEB应用会话的协议)有许多不同的URL方法。默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变这个行为。HTTP方法告知服务器,客户端想对请求的页面 做些什么。

flaskHttp方法

HTTP(与WEB应用会话的协议)有许多不同的URL方法。默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变这个行为。

HTTP方法告知服务器,客户端想对请求的页面 做些什么。下面的是最常见的方法:

  get:常用与获取数据,读,浏览器访问都是get请求

  post:写数据,浏览器默认是不支持直接post方式,一般通过变动设置 method="post"实现, 优点:表单数据会以   加密的形式传到逻辑端

而get会把提交的数据在浏览器显示

  *前端get请求,逻辑端通过request.args.get获取参数

  *前端post请求,逻辑端通过request.fORM.get获取数据



flask.request常用参数

  method:匹配当前请求方法,例如POST,GET等等

  form:一个包含解析过的,从POST或PUT请求发送的表单对象MultiDict。请注意,上传的文件不会再这里,而是在files属性中

  args:一个包含解析过的查询字符串(URL中问号后的部分)内容的MutliDict

    request.args.has_key('key'):查看是否有值传入

  JSON:如果文件类型是application/json,它将包含解析过的json数据

    request.json.get('age'):获取json方式传来的'age'的值

    request.get_json():获取json方式传来的值

  headers:将传入的请求的headers存为一个类似字典的对象

  cookies:一个包含请求中传送的所以cookie内容的字典



数据端代码优化

一、Mysql单条数据查询

>>> import mysqldb as mysql
>>> conn  = mysql.connect(host='localhost',user='root',passwd='123456',db='reboot')
>>> cur = conn.cursor()
>>> fields = ['name','name_cn','passWord','email','mobile','role','status'] # 要查询字段
>>> where = {'name':'admin'}                                                # 获取查询关键字
>>> contion = 'name = "%(name)s"'%where
>>> sql = 'select %s from users where %s'%(','.join(fields),contion)        # 构建查询语句
>>> cur.execute(sql) 
1L
>>> res = cur.fetchone()                                                    # 查询一条数据
>>> res                                                                     # 为一层元祖
('admin', 'admin', '123456', 'admin@123.com', '12312312', 'admin', '0')
>>> user = {}
>>> for i,k in enumerate(fields):                                           # (1)*根据enumerate函数,生成字典
...     user[k] = res[i]
... 
>>> user                     
{'status': '0', 'name': 'admin', 'mobile': '12312312', 'name_cn': 'admin',, 'role': 'admin', 'password': '123456', 'email': 'admin@123.com'}
>>> result = [dict((k,res[i]) for i,k in enumerate(fields))]                # (2)*更方便的写法


二、mysql多条数据查询

>>> import MySQLdb as mysql
>>> conn  = mysql.connect(host='localhost',user='root',passwd='123456',db='reboot')
>>> cur = conn.cursor()
>>> fields = ['name','name_cn','password','email','mobile','role','status'] # 要查询字段
>>> sql = 'select %s from users'%(','.join(fields))                         # 查询全部
>>> cur.execute(sql)
3L
>>> res = cur.fetchall()                                                    # 查询多条数据
>>> res                                                                     # 结果为一个嵌套元祖
(('admin', 'admin', '123456', 'admin@123.com', '12312312', 'admin', '0'), ('test', 'test', '123', '123@qq.com', '12312312312', 'admin', '0'), ('test2', 'test2', '123123', '123@qq.com', '11111111111', 'admin', '0'))
>>> result = [dict((k,row[i]) for i,k in enumerate(fields)) for row in res] # *使用enumerate函数和字典生成式
>>> result                                                                  
[{'status': '0', 'name': 'admin', 'mobile': '12312312', 'name_cn': 'admin', 'role': 'admin', 'password': '123456', 'email': 'admin@123.com'}, {'status': '0', 'name': 'test', 'mobile': '12312312312', 'name_cn': 'test', 'role': 'admin', 'password': '123', 'email': '123@qq.com'}, {'status': '0', 'name': 'test2', 'mobile': '11111111111', 'name_cn': 'test2', 'role': 'admin', 'password': '123123', 'email': '123@qq.com'}]


三、mysql数据插入

>>> import MySQLdb as mysql
>>> conn  = mysql.connect(host='localhost',user='root',passwd='123456',db='reboot')
>>> cur = conn.cursor()
>>> fields = ['name','name_cn','email','role']                               # 要插入字段
# (1)*优化写法,data为前端获取的数据,字典格式,生产环境建议使用
>>> sql = 'insert into users (%s) values (%s)"%(','.join(fields),','.join(['"%s"'%data[k] for k in fields]))                
>>> sql
'insert into users (name,name_cn,email,role) values ("test1","test1","test1@qq.com","0")'
>>> fields,values = [],[]
>>> for k,v in data.items():                                                 # (2)*k,v生成两个列表
...     fields.append(k)
...     values.append("'%s'"%v)
...
>>> fields
['name','name_cn','email','role']
>>> values
["'test1'","'test1'","'test1@qq.com'","'0'"]
>>> sql = 'insert into users (%s) values (%s)"%(','.join(fields),','.join(values)) # 使用k,v列表直接写入sql
>>> sql
'insert into users (name,name_cn,email,role) values ("test1","test1","test1@qq.com","0")'



注意:

1:如果sql语句中没有引号,最外围单双引号都可以

2:如果sql语句里面有引号,最好外面单引号,里面双引号



获取表单值得方法

1、request.form:一次性获取前端表单的所有值;dict(request.form)格式为{k1:[v1],k2:[v2],...}

2、request.form.get('name',None):获取前端固定值,如'name',如果获取不到,返回None;None为默认值,可省略

3、request.form['name']:获取前端固定值,如'name',如果获取不到,返回400错误

4、request.form.getlist['key']:获取前端固定值,如'key',当将多个值传给key时使用,如复选框获取的数据



session

session可以理解为一个全局字典,它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名。这意味着用户可以查看你Cookie 的内容,但却不能修改它,除非用户知道签名的密钥。


把用户的所有信息都存为session的一条记录,可以在任何场景下使用get获取,在每个增删查改的操作前,通过查看session中是否有记录来判断用户是否已经登录,没有登录则跳转到登录页面

from flask import Flask,request,render_template,redirect,session       # 引入session
import MySQLdb as mysql

conn=mysql.connect(user='root',host='127.0.0.1',passwd='123456',db='reboot',charset='utf8')
conn.autocommit(True)
cur = conn.cursor()


app = Flask(__name__)
app.secret_key = 'zYpRh/QxW3c='                                        # 可使用os.urandom()来生成

@app.route('/login',methods=['GET','POST'])
def login():
    if request.method == 'POST':
        data = dict((k,v[0]) for k,v in dict(request.form).items())
    #   data = {k:v[0] for k,v in dict(request.form).items()}
        if not data.get('name',None) or not data.get('password',None):
            errmsg = 'name or password not null'
            return render_template('login.html',result = errmsg)

        fields = ['name','password']
        sql = 'select %s from users where name="%s"'%(','.join(fields),data['name'])
        cur.execute(sql)
        res = cur.fetchone()
        if not res:
            errmsg = '%s is not exist'%data['name']
            return render_template('login.html',result = errmsg)
        user = {}
        user = dict((k,res[i]) for i,k in enumerate(fields))
        if user['password'] != data['password']:
            errmsg = 'password is wrong'
            return render_template('login.html',result = errmsg)
        else:
            session['name'] = data['name']                            # 将name记录到session中,生成session
            return redirect('/userlist')
    else:
        return render_template('login.html')

@app.route('/loginout')
def loginout():
    session.pop('name')                                               # 删除session中的name
    return redirect('/login')


通过谷歌浏览器查看session

wKiom1e6jG3jPX3RAACb2JfnjOE177.png



mvc思想

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入(前端)、处理(逻辑端)和输出(数据端)功能在一个逻辑的图形化用户界面的结构中。


以登录模块为例 总结MVC思想

一:前端

  1.登录页面首次登录默认get方式,返回一个待填写的表单

  2.输入用户名密码后,点击表单按钮以post方式向逻辑端发起请求,并把表单数据传给逻辑端


二:逻辑端

  3.逻辑端判断前端发起的是post表单提交还是get方式。如果get请求,说明是第一次发起,返回对应的html页面即可;如果是POST请求,说明是提交了表单数据,通过request.form获取表单数据

  4.逻辑端查询数据库,判断前端传来的表单数据是否在数据库中存在,如果存在,表示登录成功,生成session,将用户需要的信息存入session。如果不存在,则跳转到登录页面,重新输入账号密码


三:数据端

  5.对数据库的增删改查,并返回结果



Jquery学习

jQuery是一个兼容多浏览器的javascript库。

一个小例子:

<script src='/usr/src/jquery.min.js'></script>                # 在head中添加此处代码
<script>
alert('welcome to jquery')
</script>


效果如下:

wKioL1e6kDuBK4htAAAjQcXHkQ0164.png


具体可以通过http://www.w3school.com.cn/jquery/index.asp进行学习

--结束END--

本文标题: 我的python学习--第七、八天

本文链接: https://www.lsjlt.com/news/188540.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 我的python学习--第七、八天
    Flask的HTTP方法HTTP(与web应用会话的协议)有许多不同的URL方法。默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变这个行为。HTTP方法告知服务器,客户端想对请求的页面 做些什么。...
    99+
    2023-01-31
    python
  • 我的python学习--第五天
    一、函数的定义:  def 函数名(name,age=20,*params):    函数体    return 返回值  示例:def hello():     print 'hello world'               # pr...
    99+
    2023-01-31
    第五天 python
  • 我的python学习--第四天
    一、首先是对前三天的学习内容进行复习  1、python基础的数据结构      数字(int/float,包括整数和浮点数)          布尔(boolean => True/False)      字符串(str,使用''或...
    99+
    2023-01-31
    第四天 python
  • 我的python学习--第三天
    第三天  1:列表及Python基础回顾  2:字典 列表字典生成式及应用场景  3:字符串 字典字符串转换及应用场景  4:文件操作 文件字典转换及应用场景  5:总结基础数据结构的知识脑图 -- 增删查改1、列表的操作:  help(l...
    99+
    2023-01-31
    python
  • 我的python学习--第十三天
    nginx + uwsgi + flask一、安装1、安装uwsgi[root@yaoliang day_13]# wget http://projects.unbit.it/downloads/uwsgi-2.0.4.tar.gz [ro...
    99+
    2023-01-31
    第十三天 python
  • 我的python学习--第十一天
    上午:作业讲解bootstrap-multiselect插件sweetalert插件下午:datatables----表格插件datetimepicker----时间插件Validform----表单验证插件锁定用户禁止登录---...
    99+
    2023-01-31
    第十一天 python
  • 我的python学习--第十四天(一)
    一、运维管理系统(基于Flask)回顾1、权限控制  通过session实现权限控制,session是一个全局字典,当用户登录时,可以获取到用户的用户名,通过查找数据库获取用户的权限保存进session中,在每次页面跳转时同过查询sessi...
    99+
    2023-01-31
    第十四天 python
  • 我的python学习--第十二天(二)
    Python异常处理  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,所有异常都从基类Exception继承,而且都在excepti...
    99+
    2023-01-31
    二天 python
  • python学习——【第八弹】
    前言 上篇文章 python学习——【第七弹】学习了python中的可变序列集合,自此python中的序列的学习就完成啦,这篇文章开始学习python中的函数。 函数 在学习其他编程语言的时候我们就...
    99+
    2023-09-26
    python 学习 开发语言 压栈 函数
  • 学习python的第十七天(二分法,有名
    一.二分法 二分法个人理解是一种算法的方式在一个有序的序列,区中间值,把中间值与想要的值进行对比从而一次一次的减少搜索范围举例 #给与一个列表1-100, num_list = [num fornum in range(1,101)] ...
    99+
    2023-01-31
    有名 十七天 python
  • 学习python的第十八天(面向对象编程
    一.面向对象编程 ​ 面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么…… 与工厂的工艺流程差不多,前后都有影响 优点:复杂的问题流程化,进而简单化,调理清晰. 缺点:拓展性不行 二.对...
    99+
    2023-01-31
    面向对象 python
  • 学习python的第十八天(模块导入及使
    一.模块导入及使用 1.模块导入的两种方式 我们拿time模块并使用其中的time功能进行举例 a)第一种 import time print(time.time) import首次导入模块发生了3件事: 打开模块文件 执行模块对应的...
    99+
    2023-01-31
    模块 python
  • python 学习 第八篇 jquery
    简介:jQuery是一个javascript库。极大滴简化了javascript编程。包含内容:HTML 元素选取HTML 元素操作CSS 操作HTML 事件函数JavaScript 特效和动画HTML DOM 遍历和修改AJAX1:下载 ...
    99+
    2023-01-31
    第八篇 python jquery
  • python 学习第四天
    目录 基本运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 身份运算符 pyth...
    99+
    2023-01-31
    第四天 python
  • 学习python第二天
    一、python的版本选择与安装后的操作 python 2 vs 3 1。 默认支持中文 2. 不兼容2.x 3. 核心语法调整,更易学 4. 新特性默认只在3.x上有 系统位数 32bit =内存的最大寻址空间是2**32, ...
    99+
    2023-01-31
    第二天 python
  • python学习第二天
    目录 操作系统 操作系统干了什么 为什么要有操作系统 操作系统有什么用 应用程序的启动和操作系统的启动 ...
    99+
    2023-01-31
    第二天 python
  • 学习python的第四天(python的
    一.Jupyter的安装以及运行 1.Jupyter的安装 运行CMD,在CMD中输入pip3 --default-timeout=100 install -U jupyter 再输入pip3 install jupyter_contr...
    99+
    2023-01-31
    第四天 python
  • Python第八周 学习笔记(1)
    基本概念个体继承自父母,继承了父母的一部分特征,但也可以有自己的个性 子类继承了父类,就直接拥有了父类的属性和方法,也可以定义自己的属性、方法,甚至对父类的属性、方法进行重写 Python继承实现 class Cat(Anima...
    99+
    2023-01-31
    学习笔记 Python
  • python学习第二天 -----201
    第二周-第02章节-Python3.5-模块初识 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @author:chenjisong @file: sys.py @time: 2019/...
    99+
    2023-01-31
    第二天 python
  • 学习python的第三天(变量)
    一.关于python 1.交互式 说一句解释一句 2.命令行式 1.编写文件并且保存 2.打开python解释器,在pyrhon中打开文本,读入内存(python打开的时候,翻译不是瞬间) 3.python解释文本 注意:第二阶段相当于...
    99+
    2023-01-31
    变量 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作