很多天的总结::::其实主要是照搬一些东西

Mysql

学习MySQL也有很久了吧,是大二上学期的数据库系统原理。基本知识也掌握到一些了。但还是需要再复习、学习。

所学不多。

RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

  • 1.数据以表格的形式出现
  • 2.每行为各种记录名称
  • 3.每列为记录名称所对应的数据域
  • 4.许多的行和列组成一张表单
  • 5.若干的表单组成database

RDBMS的一些术语:

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • : 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

所谓的“关系型”,如果很简单直接的思考,就是:表格。

使用MySQL时,刚开始一定要记住密码;或者不设,或者一定要记住,或者就设置为12345678。否则会留下很不好的记忆的……如果说真的需要修改密码,记得去百度,前几名的多试试,总有一款适合你——记得百度的时候如果半天还搞不好,记得不要灰心,不要着急,此时要做的是,相信你走过的路和你的电脑,fighting!!!

不管是mysql还是别的什么语言一类的,刚开始配置路径必须搞好,很关键!!!

Python 3学习

Python3学习,最早是在去年的年底左右,当时报了今年3月份的计算机二级考试,有些异想天开地报了python,结果,没有通过,比较伤心。现在再借着网上的教程进行学习。

查看Python版本是在cmd中直接查看Python的版本。

教程中的第一个实例:

#!/usr/bin/python3

 

print("Hello, World!")

我当时在跟着书本学习Python时没有用到第一行,而网上教程中的下面笔记中告诉我:

“脚本语言的第一行,目的是指出你想要你的这个文件中的代码用什么可执行程序去运行它

#!/usr/bin/python3 是告诉操作系统执行这个脚本时,调用 /usr/bin 下的 python3 解释器;

#!/usr/bin/env python3 这种用法是为了防止操作系统用户没有将 python3 装在默认的 /usr/bin 路径里。当系统看到这一行时,首先会到 env 设置里查找 python3 的安装路径,再调用对应路径下的解释器程序完成操作。

#!/usr/bin/python3 相当于写死了 python3 路径;

#!/usr/bin/env python3 会去环境设置寻找 python3 目录,推荐这种写法。”

所以这里记住就好;不过有可能是因为当时我学“helloworld”程序是在IDE中,而这里是直接在cmd中运行的。

与Java等一样,Python也需要配置path。

Python很具特色的一点是用缩进来表示代码块:这个确实很方便,但是对于一些对Python掌握的很一般的、有时候有些浑水摸鱼的同学来说,这个经常带来很大的问题。。

import导入模块,这个是前几天写pycharm常用到的。

Python的print打印,双引号和单引号都可以被当做定界符,且可以嵌套使用。

注释可用#,或者’’’和”””。

反斜杠\来实现多行语句;在{}、[]、()中的语句不需要使用反斜杠\。使用r(即raw string可以使反斜杠不发生转义)

Python中可以按字面意思级联字符串,如"this " "is " "string"会被自动转换为this is string。

字符串用+连接,用*重复。

字符串截取语法格式:变量[头下标:尾下标:步长]字符串两种索引方式,从左往右以0开始,从右往左以-1开始。

    Python3 的六个标准数据类型中:

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

除法两个运算符:/返回一个浮点数;//返回一个整数。混合计算式,python会把整形转换为一个浮点型;**表示乘方。

Flask学习笔记

Flask是python编写的轻量级web应用程序框架(Web Application Framework)。

Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。Jinja2有用过。

cmd中 cd ../,推出文件夹。

一、Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来)

  Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。

默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是微小的,但它已准备好在需求繁杂的生产环境中投入使用。

pip3 install flask

 

 

#Flask依赖一个实现wsgi协议的模块:werkzeug

from werkzeug.wrappers import Request, Response

 

@Request.application

def hello(request):

    return Response('Hello World!')

 

if __name__ == '__main__':

    from werkzeug.serving import run_simple

    run_simple('localhost', 4000, hello)

 

flask依赖wsgi,实现wsgi模块:wsgiref,werkzeug,uwsgi

 

Django的简单比较

    Django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。。

    Flask:无socket,中间件(需要扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了

 

回到顶部(go to top)

二、基本使用

 

from flask import Flask

app = Flask(__name__)

 

@app.route('/')

def hello_world():

    return 'Hello World!'

 

if __name__ == '__main__':

    app.run()

 

 

 1.实例化Flask对象时,可选的参数

 

app = Flask(__name__)    # 这是实例化一个Flask对象,最基本的写法

# 但是Flask中还有其他参数,以下是可填的参数,及其默认值

 

def __init__(self, import_name, static_path=None, static_url_path=None,

                 static_folder='static', template_folder='templates',

                 instance_path=None, instance_relative_config=False,

                 root_path=None):

 

 

template_folder模板所在文件夹的名字

root_path:可以不用填,会自动找到,当前执行文件,所在目录地址

return render_template时会将上面两个进行拼接,找到对应的模板地址

static_folder静态文件所在文件的名字,默认是static,可以不用填

static_url_path静态文件的地址前缀,写成什么,访问静态文件时,就要在前面加上这个

app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx')

 

如:在根目录下创建目录,templatesstatic,则return render_template时,可以找到里面的模板页面;如在static文件夹里存放11.png,在引用该图片时,静态文件地址为:/xxxxxx/11.png

 

 instance_pathinstance_relative_config是配合来用的、

这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings.py')这种方式导入配置文件的时候会用到

instance_relative_config默认为False当设置为Truefrom_pyfile会从instance_path指定的地址下查找文件。

instsnce_path指定from_pyfile查询文件的路径,不设置时,默认寻找和app.run()的执行文件同级目录下的instance文件夹;如果配置了instance_path注意需要是绝对路径),就会从指定的地址下里面的文件

 

绑定路由关系的两种方式

 

#方式一

    @app.route('/index.html',methods=['GET','POST'],endpoint='index')

    def index():

        return 'Index'

       

#方式二

 

def index():

    return "Index"

 

self.add_url_rule(rule='/index.html', endpoint="index", view_func=index, methods=["GET","POST"])    #endpoint是别名

or

app.add_url_rule(rule='/index.html', endpoint="index", view_func=index, methods=["GET","POST"])

app.view_functions['index'] = index

 

 

添加路由关系的本质:url和视图函数封装成一个Rule对象,添加到Flaskurl_map字段中

 

2.Flask中装饰器应用

 

from flask import Flask,render_template,request,redirect,session

app = Flask(__name__)

app.secret_key = "sdsfdsgdfgdfgfh"   # 设置session时,必须要加盐,否则报错

 

def wrapper(func):

    def inner(*args,**kwargs):

        if not session.get("user_info"):

            return redirect("/login")

        ret = func(*args,**kwargs)

        return ret

    return inner

 

@app.route("/login",methods=["GET","POST"])  # 指定该路由可接收的请求方式,默认为GET

def login():

    if request.method=="GET":

        return render_template("login.html")

    else:

        # print(request.values)   #这个里面什么都有,相当于body

        username = request.form.get("username")

        password = request.form.get("password")

        if username=="haiyan" and password=="123":

            session["user_info"] = username

            # session.pop("user_info")  #删除session

            return redirect("/index")

        else:

            # return render_template("login.html",**{"msg":"用户名或密码错误"})

            return render_template("login.html",msg="用户名或者密码错误")

 

@app.route("/index",methods=["GET","POST"])

@wrapper    #自己定义装饰器时,必须放在路由的装饰器下面

def index():

    # if not session.get("user_info"):

    #     return redirect("/login")

    return render_template("index.html")

 

 

if __name__ == '__main__':

    app.run(debug=True)

 

 

debug = True 是指进入调试模式,服务器会在 我们的代码修改后, 自动重新载入,有错误的话会提醒,每次修改代码后就不需要再手动重启

点击查看详情

 

4.请求响应相关

1.获取请求数据,及相应

 

    - request

            - request.form   #POST请求的数据

            - request.args   #GET请求的数据,不是完全意义上的字典,通过.to_dict可以转换成字典

            - request.querystring  #GET请求,bytes形式的

        - response

            - return render_tempalte()   

            - return redirect()

            - return ""

            v = make_response(返回值)  #可以把返回的值包在了这个函数里面,然后再通过.set_cookie绑定cookie等

        - session

            - 存在浏览器上,并且是加密的

            - 依赖于:secret_key

 

2.flask中获取URL后面的参数(from urllib.parse import urlencode,quote,unquote)

GET请求:

URL:  http://127.0.0.1:5000/login?name=%27%E8%83%A1%E5%86%B2%27&nid=2

 

 

from urllib.parse import urlencode,quote,unquote

 

def login():

    if request.method == 'GET':

        s1 = request.args

        s2 = request.args.to_dict()

        s3 = urlencode(s1)

        s4 = urlencode(s2)

        s5 = unquote(s3)

        s6 = unquote(s4)

        s7 = quote("胡冲")

        print('s1',s1)

        print('s2',s2)

        print('s3',s3)

        print('s4',s4)

        print('s5',s5)

        print('s6',s6)

        print('s7',s7)

 

        return render_template('login.html')

 

#############结果如下####################

 

s1 ImmutableMultiDict([('name', "'胡冲'"), ('nid', '2')])

s2 { 'name': "'胡冲'", 'nid': '2'}

s3 name=%27%E8%83%A1%E5%86%B2%27&nid=2

s4 name=%27%E8%83%A1%E5%86%B2%27&nid=2

s5 name='胡冲'&nid=2

s6 name='胡冲'&nid=2

s7 %E8%83%A1%E5%86%B2

 

你可能感兴趣的:(很多天的总结::::其实主要是照搬一些东西)