最终篇:简洁易懂,初学者挑战学习Python编程30天 (五)_自学入门不在困难,初学者挑战学习python编程30天世上本无鬼

让我们添加额外的路线。创建关于路由

#让我们
从 flask 导入 flask import Flask 
import  os  #导入操作系统模块

app  =  Flask ( __name__ )

@app.route('/') # 这个装饰器创建 home 路由
def  home ():
     return  '<h1>Welcome</h1>'

@app.route('/about')
def  about ():
     return  '<h1>About us</h1>'

如果 __name__  ==  '\_\_main\_\_' :
#部署,我们使用ENVIRON 
#使之成为生产和开发工作
  port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

现在,我们在上面的代码中添加了 about 路由。如果我们想渲染一个 HTML 文件而不是字符串呢?可以使用函数render_templae渲染 HTML 文件。让我们创建一个名为 templates 的文件夹,并在项目目录中创建 home.html 和 about.html。让我们也从flask导入render_template函数。

26.5创建模板

在模板文件夹中创建 HTML 文件。

主页.html

<!DOCTYPE html >
 < html  lang =" en " > 
  < head > 
    < meta  charset =" UTF-8 " />
     <元 名称="viewport" content =" width=device-width, initial-scale=1.0 " / >
     < title >首页</ title > 
  </ head >

  < body > 
    < h1 >Welcome Home</ h1 > 
  </ body > 
</ html >

关于.html

<!DOCTYPE html >
 < html  lang =" en " > 
  < head > 
    < meta  charset =" UTF-8 " />
     <元 名称="viewport" content =" width=device-width, initial-scale=1.0 " / >
     < title >关于</ title > 
  </ head >

  < body > 
    < h1 >关于我们</ h1 > 
  </ body > 
</ html >

26.6Python脚本

app.py

# 让我们
从 flask 导入 flask import Flask , render_template 
import  os  # 导入操作系统模块

app  =  Flask ( __name__ )

@app.route('/')  # 这个装饰器创建 home 路由
def  home ():
     return  render_template ( 'home.html' )

@app.route('/about')
def  about():
    返回 render_template('about.html')

如果 __name__  ==  '\_\_main\_\_' :
#部署,我们使用ENVIRON 
#使之成为生产和开发工作
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

如您所见,要转到不同的页面或导航,我们需要导航。让我们为每个页面添加一个链接,或者让我们创建一个用于每个页面的布局。

26.7导航

<ul>
  <li><a href="/">Home</a></li>
  <li><a href="/about">About</a></li>
</ul>

现在,我们可以使用上面的链接在页面之间导航。让我们创建处理表单数据的附加页面。你可以叫它任何名字,我喜欢叫它 post.html。

我们可以使用 Jinja2 模板引擎将数据注入到 HTML 文件中。

# 让我们
从 flask 导入 flask import Flask , render_template , request , redirect , url_for 
import  os  # 导入操作系统模块

app  =  Flask ( __name__ )

@app.route ( '/' ) # 这个装饰器创建 home 路由
def  home ():
     techs  = [ 'HTML' , 'CSS' , 'Flask' , 'Python' ]
     name  =  '30 Days Of Python Programming' 
    return  render_template ( ' home.html' , techs = techs , name  =  name , title  =  'Home' )

@app.route( '/about' ) 
def  about ():
     name  =  '30 Days Of Python Programming' 
    return  render_template ( 'about.html' , name  =  name , title  =  'About Us' )

@app.route( '/post' ) 
def  post ():
     name  =  'Text Analyzer' 
    return  render_template ( 'post.html' , name  =  name , title  =  name )


如果 __name__  ==  '\_\_main\_\_' :

#部署
#使之成为生产和开发工作
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

让我们也看看模板:

主页.html

<!DOCTYPE html >
 < html  lang =" en " > 
  < head > 
    < meta  charset =" UTF-8 " />
     <元 名称="视口" content =" width=device-width, initial-scale=1.0 " / >
     < title >首页</ title > 
  </ head >
<body>
    <ul>
      <li><a href="/">Home</a></li>
      <li><a href="/about">About</a></li>
    </ul>
    <h1>Welcome to {{name}}</h1>
     <ul>
    {% for tech in techs %}
      <li>{{tech}}</li>
    {% endfor %}
    </ul>
  </body>
</html>
 

关于.html

<!DOCTYPE html >
 < html  lang =" en " > 
  < head > 
    < meta  charset =" UTF-8 " />
     <元 名称="视口" content =" width=device-width, initial-scale=1.0 " / >
     < title >关于我们</ title > 
  </ head >

  <body>
    <ul>
      <li><a href="/">Home</a></li>
      <li><a href="/about">About</a></li>
    </ul>
    <h1>About Us</h1>
    <h2>{{name}}</h2>
  </body>
</html>

26.8创建布局

在模板文件中,有很多重复的代码,我们可以写一个布局,我们可以删除重复。让我们在模板文件夹中创建 layout.html。创建布局后,我们将导入到每个文件中。

提供静态文件

在您的项目目录中创建一个静态文件夹。在静态文件夹中创建 CSS 或样式文件夹并创建一个 CSS 样式表。我们使用url_for模块来提供静态文件。

布局.html

<!DOCTYPE html >
 < html  lang =" en " > 
  < head > 
    < meta  charset =" UTF-8 " />
     <元 名称="视口" content =" width=device-width, initial-scale=1.0 " / >
     < link 
      href =" https://fonts.googleapis.com/css?family=Lato:300,400|Nunito:300,400|Raleway:300,400,500&display=swap "
       rel ="样式表"
    />
    < link 
      rel ="样式表"
       href =" {{url\_for('static', filename='css/main.css') }} "
    />
     {% if title %}
    <title>30 Days of Python - {{ title}}</title>
    {% else %}
    <title>30 Days of Python</title>
    {% endif %}
 </head>

  <body>
    <header>
      <div class="menu-container">
        <div>
          <a class="brand-name nav-link" href="/">30DaysOfPython</a>
        </div>
        <ul class="nav-lists">
          <li class="nav-list">
            <a class="nav-link active" href="{{ url\_for('home') }}">Home</a>
          </li>
          <li class="nav-list">
            <a class="nav-link active" href="{{ url\_for('about') }}">About</a>
          </li>
          <li class="nav-list">
            <a class="nav-link active" href="{{ url\_for('post') }}"
              >Text Analyzer</a
            >
          </li>
        </ul>
      </div>
    </header>
    <main>
      {% block content %} {% endblock %}
    </main>
  </body>
</html>

现在,让我们删除其他模板文件中的所有重复代码并导入 layout.html。href 使用url_for函数和路由函数的名称来连接每个导航路由。

主页.html

{% extends 'layout.html' %} {% block content %}
<div class="container">
  <h1>Welcome to {{name}}</h1>
  <p>
    此应用程序清理文本并分析单词、字符和
    文本中出现频率最高的词。通过单击文本分析器检查它
    菜单。您需要以下技术来构建此 Web 应用程序:
  </ p > 
  <ul class="tech-lists">
    {% for tech in techs %}
    <li class="tech">{{tech}}</li>

    {% endfor %}
  </ul>
</div>

{% endblock %}

关于.html

{% extends 'layout.html' %} {% block content %}
 < div  class =" container " > 
  < h1 >关于{{name}} </ h1 > 
  < p >
    这是 30 天的 Python 编程挑战。如果你一直在编码
    到目前为止,你太棒了。祝贺你的工作做得好!
  </ p > 
</ div > 
{% endblock %}

后.html

{% extends 'layout.html' %} {% block content %}
 < div  class =" container " > 
  < h1 >文本分析器</ h1 > 
  < form  action =" https://thirtydaysofpython-v1.herokuapp.com/post" method="POST"> 
    < DIV > 
      < textarea的 行=” 25 “名称=”内容“的自动对焦> </ textarea的> 
    </ div > 
    <div > 
      < input  type =" submit " class =" btn " value ="处理文本"/>
     </ div > 
  </ form > 
</ div >

{% 结束块 %}

请求方法,有不同的请求方法(GET、POST、PUT、DELETE)是常见的请求方法,它们允许我们进行 CRUD(创建、读取、更新、删除)操作。

在帖子中,我们将根据请求的类型使用 GET 和 POST 方法替代,请查看下面代码中的外观。请求方法是处理请求方法和访问表单数据的函数。应用程序

# 让我们
从 flask 导入 flask import Flask , render_template , request , redirect , url_for 
import  os  # 导入操作系统模块

app  =  Flask ( __name__ )
 # 停止缓存静态文件
app . 配置[ 'SEND\_FILE\_MAX\_AGE\_DEFAULT' ] =  0



@app.route ( '/' ) # 这个装饰器创建 home 路由
def  home ():
     techs  = [ 'HTML' , 'CSS' , 'Flask' , 'Python' ]
     name  =  '30 Days Of Python Programming' 
    return  render_template ( ' home.html' , techs = techs , name  =  name , title  =  'Home' )

@app.route ( '/about' ) 
def  about ():
     name  =  '30 Days Of Python Programming' 
    return  render_template ( 'about.html' , name  =  name , title  =  'About Us' )

@app.route('/result')
def  result():
    返回 render_template('result.html')

@app.route ( '/post' , methods = [ 'GET' , 'POST' ]) 
def  post ():
     name  =  'Text Analyzer' 
    if  request。method  ==  'GET' :
         如果request,则返回 render_template ( 'post.html' , name  =  name , title  =  name )
    if request.method =='POST':
        content = request.form['content']
        print(content)
        return redirect(url_for('result'))

如果 __name__  ==  '\_\_main\_\_' :
# 部署
#使之成为生产和开发工作
   port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

到目前为止,我们已经看到了如何使用模板以及如何向模板注入数据,如何进行通用布局。现在,让我们处理静态文件。在project Director中创建一个名为static的文件夹,并创建一个名为css的文件夹。在 css 文件夹中创建 main.css。你的主要。css 文件将链接到 layout.html。

您不必编写css文件,复制并使用它。让我们继续进行部署。

26.9部署

创建 Heroku 帐户
Heroku 为前端和全栈应用程序提供免费部署服务。在heroku上创建一个帐户并为您的机器安装 heroku CLI。安装heroku后写下以下命令

登录 Heroku

asabeneh@Asabeneh: ~ $ heroku 登录
heroku:按任意键打开浏览器登录或 q 退出:

让我们通过单击键盘上的任意键来查看结果。当您按键盘上的任意键时,它将打开 heroku 登录页面并单击登录页面。然后你将本地机器连接到远程 heroku 服务器。如果你连接到远程服务器,你会看到这个。

asabeneh@Asabeneh: ~ $ heroku 登录
heroku:按任意键打开浏览器登录或 q 退出:
打开浏览器到 https://cli-auth.heroku.com/auth/browser/be12987c-583a-4458-a2c2-ba2ce7f41610
登录...进行
已记录在为asabeneh@gmail.com
asabeneh@Asabeneh:~ $

创建需求和Procfile
在我们将代码推送到远程服务器之前,我们需要一些要求

  • 要求.txt
  • 配置文件
(env) asabeneh@Asabeneh: ~ /Desktop/python_for_web$ pip freeze
Click==7.0
Flask==1.1.1
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.0
(env) asabeneh@Asabeneh: ~ /Desktop/python_for_web$ touch requirements.txt
(env) asabeneh@Asabeneh: ~ /Desktop/python_for_web$ pip freeze > requirements.txt
(env) asabeneh@Asabeneh: ~ /Desktop/python_for_web$ cat requirements.txt
Click==7.0
Flask==1.1.1
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.0
(env) asabeneh@Asabeneh: ~ /Desktop/python_for_web$ touch Procfile
(env) asabeneh @ Asabeneh: ~ / Desktop / python_for_web $ ls
Procfile 环境/静态/
app.py requirements.txt 模板/
(env) asabeneh@Asabeneh: ~ /Desktop/python_for_web$

Procfile 将具有在我们的 Heroku 上的示例中在 Web 服务器中运行应用程序的命令。

网络:python app.py

将项目推送到heroku
现在,它已准备好部署。在 heroku 上部署应用程序的步骤

  1. 混帐初始化
  2. git 添加。
  3. git commit -m “提交消息”
  4. heroku 创建“应用程序名称作为一个词”
  5. git push heroku master
  6. heroku open(启动部署的应用程序)

这个步骤后,你会得到这样一个应用程序
在这里插入图片描述
在这里插入图片描述

第 27 天 - Python 与 MongoDB

Python 是一种后端技术,它可以连接不同的数据库应用程序。它可以连接到 SQL 和 noSQL 数据库。在本节中,我们将 Python 与 MongoDB 数据库(noSQL 数据库)连接起来。

27.1MongoDB

MongoDB 是一个 NoSQL 数据库。MongoDB 将数据存储在类似 JSON 的文档中,这使 MongoDB 非常灵活和可扩展。让我们看看 SQL 和 NoSQL 数据库的不同术语。下表将区分 SQL 与 NoSQL 数据库。

SQL 与 NoSQL
在这里插入图片描述

在本节中,我们将重点介绍 NoSQL 数据库 MongoDB。让我们通过单击登录按钮在mongoDB上注册,然后单击下一页上的注册。

在这里插入图片描述

填写字段并单击继续

在这里插入图片描述

选择免费计划

在这里插入图片描述

选择最接近的空闲区域并为您的集群指定任何名称。

在这里插入图片描述

现在,创建了一个免费的沙箱

在这里插入图片描述

所有本地主机访问

在这里插入图片描述

添加用户和密码

在这里插入图片描述

创建一个 mongoDB uri 链接

在这里插入图片描述

选择 Python 3.6 或以上驱动

在这里插入图片描述

27.2获取连接字符串(MongoDB URI)

复制连接字符串链接,你会得到这样的东西

mongodb+srv://asabeneh: <密码> @30daysofpython-twxkr.mongodb.net/test ? retryWrites=true & w=majority

不要担心 url,它是将您的应用程序与 mongoDB 连接的一种方式。让我们用您用来添加用户的密码替换密码占位符。

例子:

mongodb+srv://asabeneh:123123123@30daysofpython-twxkr.mongodb.net/test ? retryWrites=true & w=majority

现在,我替换了所有内容,密码为 123123,数据库名称为三十天_python。这只是一个例子,你的密码必须比这强一点。

Python 需要一个 mongoDB 驱动程序来访问 mongoDB 数据库。我们将使用pymongo和dnspython将我们的应用程序与 mongoDB base 连接起来。在您的项目目录中安装 pymongo 和 dnspython。

pip 安装 pymongo dnspython

必须安装“dnspython”模块才能使用 mongodb+srv:// URI。dnspython 是 Python 的 DNS 工具包。它支持几乎所有的记录类型。

27.3将 Flask 应用程序连接到 MongoDB 集群

# 导入flask 
from  flask  import  Flask , render_template 
import  os  # 导入操作系统模块
MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' 
client  =  py . MongoClient(MONGODB_URI)
print(client.list_database_names())

print(client.list_database_names())
#部署,我们使用ENVIRON 
#使之成为生产和开发工作
   port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

当我们运行上面的代码时,我们得到了默认的 mongoDB 数据库。

['admin', 'local']

27.3创建数据库和集合

让我们创建一个数据库,如果 mongoDB 中的数据库和集合不存在,则会创建它。让我们创建一个数据库名称三十天_of_python和学生集合。创建数据库

db = client.name_of_databse #我们可以像这样或第二种方式创建数据库
db = client[ ' name\_of\_database ' ]

# 导入flask 
from  flask  import  Flask , render_template 
import  os  # 导入操作系统模块
MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' 
client  =  py . MongoClient ( MONGODB_URI )
 # 创建数据库
db  =  client . 30_days_of_python 
# 创建学生集合并插入文档
db.students.insert_one ({ '姓名':'Asabeneh' ,'国家':'芬兰','城市':'赫尔辛基','时代':250 })
print(client.list_database_names())

app = Flask(__name__)
if __name__ == '\_\_main\_\_':
#部署,我们使用ENVIRON 
#使之成为生产和开发工作
   port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

创建数据库后,我们还创建了一个学生集合,并使用insert_one()方法插入文档。现在,数据库三十天_of_python和学生集合已创建,文档已插入。检查您的 mongoDB 集群,您将看到数据库和集合。在集合内部,会有一个文档。

[ ['thirty\_days\_of\_python', 'admin', 'local'] ]

如果你在 mongoDB 集群上看到这个,说明你已经成功创建了一个数据库和一个集合。

在这里插入图片描述

如果您在图中看到,该文档已经创建了一个长 id 作为主键。每次我们创建一个文档 mongoDB 都会为它创建一个唯一的 id。

27.4将许多文档插入到集合中

该insert_one() 方法一次插入一个项目,如果我们想在任何一次我们使用插入许多文档insert_many()方法或循环。我们可以使用 for 循环一次插入多个文档。

# 导入flask 
from  flask  import  Flask , render_template 
import  os  # 导入操作系统模块
MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' 
client  =  py . MongoClient ( MONGODB_URI )

学生 = [
        { 'name' : 'David' , 'country' : 'UK' , 'city' : 'London' , 'age' : 34 },
        { 'name' : 'John' , 'country' : '瑞典' , 'city' : 'Stockholm' , 'age' : 28 },
        { 'name' : 'Sami' , 'country' : 'Finland' , 'city' : 'Helsinki' , 'age' : 25 },
    ]
for student in students:
    db.students.insert_one(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    #部署,我们使用ENVIRON 
    #使之成为生产和开发工作
   port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

27.5MongoDB 查找

该find()方法和findOne()方法是在MongoDB中的数据库集合中找到数据常用的方法。它类似于 MySQL 数据库中的 SELECT 语句。让我们使用find_one()方法来获取数据库集合中的文档。
1.*find_one({“_id”: ObjectId(“id”}):如果没有提供id,则获取第一次出现

# 导入flask 
from  flask  import  Flask , render_template 
import  os  # 导入操作系统模块
MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' 
client  =  py . MongoClient ( MONGODB_URI )
 db  =  client [ 'thirty\_days\_of\_python' ] # 访问数据库
student = db.students.find_one()
print(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
   # 部署,我们使用ENVIRON 
   #使之成为生产和开发工作
   port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{ ' \_id ':物件(' 5df68a21f106fe2d315bbc8b '),'名':' Asabeneh ','国':'赫尔辛基','城市':'赫尔辛基','年龄':250}

上面的查询返回第一个条目,但我们可以使用特定的 _id 定位特定的文档。举个例子,用David的id来获取David对象。’_id’:ObjectId(‘5df68a23f106fe2d315bbc8c’)

# 让我们
从 flask  import  Flask导入flask , render_template 
import  os  #
从 bson导入操作系统模块。objectid  import  ObjectId  # id 对象
MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' 
client  =  pymongo . MongoClient ( MONGODB_URI )
 db  =  client [ 'thirty\_days\_of\_python' ] # 访问数据库
student = db.students.find_one({'\_id':ObjectId('5df68a23f106fe2d315bbc8c')})
print(student)

app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    #部署,我们使用ENVIRON 
    #使之成为生产和开发工作
   port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'\_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34}

我们已经通过上面的例子看到了如何使用find_one()。让我们移动一个到find()

2.find():如果我们不传递查询对象,则返回集合中的所有出现。该对象是 pymongo.cursor 对象。

# 让我们
从 flask 导入 flask import Flask , render_template 
import  os  # 导入操作系统模块

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database
students = db.students.find()
for student in students:
    print(student)

app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

我们可以通过在find({}, {}) 中传递第二个对象来指定要返回的字段。0 表示不包含,1 表示包含但我们不能混合 0 和 1,除了 _id。

# 让我们
从 flask 导入 flask import Flask , render_template 
import  os  # 导入操作系统模块

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database
students = db.students.find({}, {"\_id":0,  "name": 1, "country":1}) # 0 means not include and 1 means include
for student in students:
    print(student)

app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'name': 'Asabeneh', 'country': 'Finland'}
{'name': 'David', 'country': 'UK'}
{'name': 'John', 'country': 'Sweden'}
{'name': 'Sami', 'country': 'Finland'}

27.6用查询查找

在 mongoDB 中找到一个查询对象。我们可以传递一个查询对象,我们可以过滤我们想要过滤掉的文档。

# let's import the flask
from flask import Flask, render_template
import os # importing operating system module

MONGODB_URI = 'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database

query = {
    "country":"Finland"
}
students = db.students.find(query)

for student in students:
    print(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

 # 导入操作系统模块

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient ( MONGODB_URI )
 db  =  client [ 'thirty\_days\_of\_python' ] # 访问数据库

query = {
    "country":"Finland"
}
students = db.students.find(query)

for student in students:
    print(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)


{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

使用修饰符查询

# 让我们
从 Flask  导入Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient ( MONGODB_URI )
db = client['thirty\_days\_of\_python'] # accessing the database

query = {
    "city":"Helsinki"
}
students = db.students.find(query)
for student in students:
    print(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

27.7使用修饰符查找查询

# 让我们
从  Flask 导入 Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient ( MONGODB_URI )
db = client['thirty\_days\_of\_python'] # accessing the database
query = {
    "country":"Finland",
    "city":"Helsinki"
}
students = db.students.find(query)
for student in students:
    print(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

使用修饰符查询

# 让我们
从 Flask  导入  Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database
query = {"age":{"$gt":30}}
students = db.students.find(query)
for student in students:
    print(student)

app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34}

# 让我们
从 Flask 导入 Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database
query = {"age":{"$gt":30}}
students = db.students.find(query)
for student in students:
    print(student)

{'\_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

27.8限制文件

我们可以使用limit()方法限制返回的文档数量。

# 让我们
从 Flask  导入 Flask  import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database
db.students.find().limit(3)

27.9排序查找

默认情况下,排序按升序排列。我们可以通过添加 -1 参数将排序更改为降序。

# 让我们
从 Flask 导入 Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database
students = db.students.find().sort('name')
for student in students:
    print(student)


students = db.students.find().sort('name',-1)
for student in students:
    print(student)

students = db.students.find().sort('age')
for student in students:
    print(student)

students = db.students.find().sort('age',-1)
for student in students:
    print(student)

app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

升序

{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

降序排列

{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34}
{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}

27.10使用查询更新

我们将使用update_one()方法来更新一项。它需要两个对象,一个是查询,第二个是新对象。第一个人 Asabeneh 的年龄非常令人难以置信。让我们更新 Asabeneh 的年龄。

# 让我们
从 Flask 导入 Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
客户端 =  pymongo。MongoClient ( MONGODB_URI )
 db  =  client [ 'thirty\_days\_of\_python' ] # 访问数据库

query = {'age':250}
new_value = {'$set':{'age':38}}

db.students.update_one(query, new_value)
# lets check the result if the age is modified
for student in db.students.find():
    print(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 38}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

当我们想一次更新许多文档时,我们使用upate_many()方法。

27.11删除文档

delete_one()方法删除一个文档。所述delete_one()需要一个查询对象参数。它只删除第一次出现。让我们从集合中删除一个约翰。

# 让我们
从 Flask 导入Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI = 'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty\_days\_of\_python'] # accessing the database

query = {'name':'John'}
db.students.delete_one(query)

for student in db.students.find():
    print(student)
# lets check the result if the age is modified
for student in db.students.find():
    print(student)


app = Flask(__name__)
if __name__ == '\_\_main\_\_':
    # for deployment we use the environ
    # to make it work for both production and development
    port = int(os.environ.get("PORT", 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

{'\_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 38}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34}
{'\_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25}

如您所见,John 已从集合中删除。

当我们要删除很多文档时,我们使用delete_many()方法,它需要一个查询对象。如果我们将一个空的查询对象传递给delete_many({}),它将删除集合中的所有文档。

27.12删除一个集合

使用drop()方法,我们可以从数据库中删除一个集合。

# 让我们
从 Flask 导入 Flask import Flask , render_template 
import  os  # 导入操作系统模块
import  pymongo

MONGODB_URI  =  'mongodb+srv://asabeneh:your\_password\_goes\_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority'
client = pymongo.MongoClient(MONGODB_URI)
 db  =  client [ 'thirty\_days\_of\_python' ] # 访问数据库
db.students.drop()

现在,我们已经从数据库中删除了学生集合。
在这里插入图片描述

第 28 天 - API

28.1应用程序编程接口(API)

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值