整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Python用20行代碼就能實現漂亮的網頁界面?你確定不來看看

          們在寫一個網站或者一個網頁界面的時候,需要學習很多東西,對小白來說很困難!比如我要做一個簡單的網頁交互:

          要懂后端,比如Python里面的Django或者Flask,或者是Java里面的SpringBoot

          要懂前端,現在都叫大前端了(因為很復雜),比如前端的框架Vue/React, 然后頁面的美化框架Bootstrap ,還有html ,csss 和Javascript 三駕馬車.

          天啊,聽聽頭都大呢!其實我就給老板做一個簡單的交互的頁面,而且我只會Python ,有沒有很簡單的辦法可以做到呢。

          今天小編在Github上逛的時候,找到一個非常酷的神器,名字叫remi ,目前收獲了2300個贊。

          star并不是很多, 但是這個庫可是選入2018年的十大明星庫 ,號稱是一個獨立的GUI庫,而且最牛逼的就是這個庫 竟然小于 100K ,是否很神奇呢,我們一起來體驗一下特性:

          跟其他GUI庫區別? Kivy,PyQT和PyGObject都需要主機操作系統的本機代碼,這意味著安裝或編譯大型依賴項。Remi只需要一個Web瀏覽器即可顯示您的GUI。

          我需要懂HTML嗎? 不,只需要使用Python進行編碼。

          它是開源的嗎? 當然!Remi是根據Apache許可發布的。開源,免費!

          我需要某種網絡服務器嗎? 不,自帶網絡服務器。

          1、安裝

          如何安裝呢,因為是Python 庫,直接用pip 即可

          pip install remi

          如果是沒有網絡的,或者服務器跟外網不通的,可以離線安裝。下載這個包,然后用install 安裝

          python setup.py install

          2、快速體驗

          我們來快速看一下,這個簡單的Hello world網頁。

          這里面包含了一個 2個元素:

          • 文本Hello world ;
          • 一個Press me的按鈕;

          點擊這個按鈕還會改變Hello world的文本內容,看點一下就變成了Button pressed.

          上面這個簡單的效果,其實只用了20來行Python代碼,都是原生的Python代碼,沒有用一行HTML .

          我們來看一下源碼:

          整個代碼的結構層次還很清晰的:

          • 首先聲明一個MyApp類,這個類會繼承母框架App里面的功能,可以認為是一個網頁畫布;
          • 然后在這個畫布里面有3個函數:

          init主要是做類的初始化工作;

          main主要對這個畫布布局進行設計,包含一個文本和一個按鈕。

          on_button_pressed主要是控件的相應,點擊觸發函數

          • 最后是start來啟動這個類,就會生成一個本地的網站鏈接

          3、更多復雜的網頁元素

          看完上面的設計是不是就覺得跟Python里面大名鼎鼎的tk庫很相似啊,上面的只是開胃菜,這個remi還能提供更復雜的gui界面元素。

          上面的是一個完整的demo頁面,基本上常見的控件元素的都包含了,比如有菜單欄,文本,按鈕,單選框,進度欄,下拉框,表格,彈出框,按鈕選取文件路徑,文件樹形結構,日期等幾十種控件。

          有了這個神器,是不是可以告別Python里面的tk庫,也可以省去學習HTML的時間,還等啥,趕緊下載嘗鮮一下吧。

          對Python感興趣或者是正在學習的小伙伴,可以點贊關注收藏支持一波哦, 持續更新中


          原文鏈接:https://blog.csdn.net/NNNJ9355/article/details/107319582

          問題

          我們需要以客戶端的形式通過HTTP協議訪問多種服務。比如,下載數據或者同一個基于REST的API進行交互。

          解決方案

          對于簡單的任務來說,使用urllib.request模塊通常就足夠了。比方說,要發送一個簡單的HTTP GET請求到遠端服務器上,可以這樣做:

          from urllib import request, parse
          # Base URL being accessed
          url = 'http://httpbin.org/get'
          # Dictionary of query parameters (if any)
          parms = {
           'name1' : 'value1',
           'name2' : 'value2'
          }
          # Encode the query string
          querystring = parse.urlencode(parms)
          # Make a GET request and read the response
          u = request.urlopen(url+'?' + querystring)
          resp = u.read()
          

          如果需要使用POST方法在請求主體(request body)中發送查詢參數,可以將參數編碼后作為可選參數提供給urlopen()函數,就像這樣:

          from urllib import request, parse
          # Base URL being accessed
          url = 'http://httpbin.org/post'
          # Dictionary of query parameters (if any)
          parms = {
           'name1' : 'value1',
           'name2' : 'value2'
          }
          # Encode the query string
          querystring = parse.urlencode(parms)
          # Make a POST request and read the response
          u = request.urlopen(url, querystring.encode('ascii'))
          resp = u.read()
          

          如果需要在發出的請求中提供一些自定義的HTTP頭,比如修改user-agent字段,那么可以創建一個包含字段值的字典,并創建一個Request實例然后將其傳給urlopen()。示例如下:

          from urllib import request, parse
          ...
          # Extra headers
          headers = {
           'User-agent' : 'none/ofyourbusiness',
           'Spam' : 'Eggs'
          }
          req = request.Request(url, querystring.encode('ascii'), headers=headers)
          # Make a request and read the response
          u = request.urlopen(req)
          resp = u.read()
          

          如果需要交互的服務比上面的例子都要復雜,也許應該去看看requests庫([http://pypi. python.org/pypi/requests](http://pypi. python.org/pypi/requests))。比如,下面這個示例采用requests庫重新實現了上面的操作:

          import requests
          # Base URL being accessed
          url = 'http://httpbin.org/post'
          # Dictionary of query parameters (if any)
          parms = {
           'name1' : 'value1',
           'name2' : 'value2'
          }
          # Extra headers
          headers = {
           'User-agent' : 'none/ofyourbusiness',
           'Spam' : 'Eggs'
          }
          resp = requests.post(url, data=parms, headers=headers)
          # Decoded text returned by the request
          text = resp.text
          

          關于requests庫,一個值得一提的特性就是它能以多種方式從請求中返回響應結果的內容。從上面的代碼來看,resp.text帶給我們的是以Unicode解碼的響應文本。但是,如果去訪問resp.content,就會得到原始的二進制數據。另一方面,如果訪問resp.json,那么就會得到JSON格式的響應內容。

          下面這個示例利用requests庫來發起一個HEAD請求,并從響應中提取出一些HTTP頭數據的字段:

          import requests
          resp = requests.head('http://www.python.org/index.html')
          status = resp.status_code
          last_modified = resp.headers['last-modified']
          content_type = resp.headers['content-type']
          content_length = resp.headers['content-length']
          

          下面的示例使用requests庫通過基本的認證在Python Package Index(也就是pypi)上執行了一個登錄操作:

          import requests
          resp = requests.get('http://pypi.python.org/pypi?:action=login',
           auth=('user','password'))
          

          下面的示例使用requests庫將第一個請求中得到的HTTP cookies傳遞給下一個請求:

          import requests
          # First request
          resp1 = requests.get(url)
          ...
          # Second requests with cookies received on first requests
          resp2 = requests.get(url, cookies=resp1.cookies)
          

          最后但也同樣重要的是,下面的例子使用requests庫來實現內容的上傳:

          import requests
          url = 'http://httpbin.org/post'
          files = { 'file': ('data.csv', open('data.csv', 'rb')) }
          r = requests.post(url, files=files)
          

          討論

          對于確實很簡單的HTTP客戶端代碼,通常使用內建的urllib模塊就足夠了。但是,如果要做的不僅僅只是簡單的GET或POST請求,那就真的不能再依賴它的功能了。這時候就是第三方模塊比如requests大顯身手的時候了。

          舉個例子,如果我們決定堅持使用標準的程序庫而不考慮像requests這樣的第三方庫,那么也許就不得不使用底層的http.client模塊來實現自己的代碼。比方說,下面的代碼展示了如何執行一個HEAD請求:

          from http.client import HTTPConnection
          from urllib import parse
          c = HTTPConnection('www.python.org', 80)
          c.request('HEAD', '/index.html')
          resp = c.getresponse()
          print('Status', resp.status)
          for name, value in resp.getheaders():
           print(name, value)
          

          同樣地,如果必須編寫涉及代理、認證、cookies以及其他一些細節方面的代碼,那么使用urllib就顯得特別別扭和啰嗦。比方說,下面這個示例實現在Python package index上的認證:

          import urllib.request
          auth = urllib.request.HTTPBasicAuthHandler()
          auth.add_password('pypi','http://pypi.python.org','username','password')
          opener = urllib.request.build_opener(auth)
          r = urllib.request.Request('http://pypi.python.org/pypi?:action=login')
          u = opener.open(r)
          resp = u.read()
          # From here. You can access more pages using opener
          ...
          

          坦白說,所有這些操作在requests庫中都變得簡單得多。

          在開發過程中測試HTTP客戶端代碼常常是很令人沮喪的,因為所有棘手的細節問題都需要考慮(例如cookies、認證、HTTP頭、編碼方式等)。要完成這些任務,考慮使用httpbin服務(http://httpbin.org)。這個站點會接收發出的請求,然后以JSON的形式將響應信息回傳回來。下面是一個交互式的例子:

          >>> import requests
          >>> r = requests.get('http://httpbin.org/get?name=Dave&n=37',
          ... headers = { 'User-agent': 'goaway/1.0' })
          >>> resp = r.json
          >>> resp['headers']
          {'User-Agent': 'goaway/1.0', 'Content-Length': '', 'Content-Type': '',
          'Accept-Encoding': 'gzip, deflate, compress', 'Connection':
          'keep-alive', 'Host': 'httpbin.org', 'Accept': '*/*'}
          >>> resp['args']
          {'name': 'Dave', 'n': '37'}
          >>>
          

          在要同一個真正的站點進行交互前,先在httpbin.org這樣的網站上做實驗常常是可取的辦法。尤其是當我們面對3次登錄失敗就會關閉賬戶這樣的風險時尤為有用(不要嘗試自己編寫HTTP認證客戶端來登錄你的銀行賬戶)。

          盡管本節沒有涉及,requests庫還對許多高級的HTTP客戶端協議提供了支持,比如OAuth。requests模塊的文檔(http://docs.python-requests.org)質量很高(坦白說比在這短短一節的篇幅中所提供的任何信息都好),可以參考文檔以獲得更多的信息。


          果你不了解python,可以先了解python的簡單用法。不過人郵君相信,在座的各位都是大佬,我們直接介紹操作。

          第一部分,我們先來介紹python與mysql如何完成數據交互:

          python 與 mysql 實現交互的過程,通常分為:建立連接、把sql語句定義為字符串,提交指令、關閉連接。

          核心的技能在于 sql語句;除了定義sql語句,其余3個處理都是固定的寫法。接下來,人郵君結合《MySQL是怎樣運行的》這本書,Linux環境為主,為大家進行說明。

          MySQL是怎樣運行的 從根兒上理解MySQL

          MySQL是怎樣運行的 從根兒上理解MySQL
          ¥49.5
          購買
          <script src="http://mp.toutiao.com/mp/agw/mass_profit/pc_product_promotions_js?item_id=6909291449641075203"></script>

          首先來看第一步,安裝 MySQL 數據庫:

          如果你想要使用python操作MySQL數據庫,就必須先要安裝pymysql庫,這個庫的安裝很簡單;

          第二步,pymysql 模塊安裝與使用:

          MySQL-python驅動,是python 操作mysql必不可少的模塊。

          下載MySQL-python-1.2.5.zip 文件之后直接解壓。進入MySQL-python-1.2.5目錄:

          >>python setup.py install

          下載地址:https://pypi.python.org/pypi/MySQL-python/

          第三步,python與mysql的交互實現:

          1)連接

          pymysql .connect () 函數:連接數據庫

          使用 pymysql 的 connect() 方法連接數據庫,涉及到幾個參數,具體代表意義如下:

          host:MySQL服務的地址,若數據庫在本地上,使用 localhost 或者127.0.0.1。如果在其它服務器上,則寫對應的 IP地址

          port:服務的端口號,默認為3306,不寫則為默認值。

          user:登錄數據庫的用戶名

          passwd:登錄 MySQL 的密碼

          db:數據庫名

          charset:設置為 utf8 編碼,解決存漢字亂碼問題

          eg:

          # 導入模塊
          import pymysql
          # 打開數據庫連接
          conn = pymysql.connect(
              host="127.0.0.1",
              user="root",
              password="123456",
              database="test_db",
              charset="utf8")
          print(conn)
          print(type(conn))

          輸出結果顯示如下:表面數據庫連接成功

          詳細可以參考

          https://www.cnblogs.com/qjj19931230/p/12550384.html?utm_source=tuicool

          這里要強調的是,除了上面的連接方式,還有其他的連接。在《MySQL是怎樣運行的》這本書中,介紹到,mysql連接分為內連接和外連接。內外連接的根本區別是在驅動表中記錄不符合ON子句中的連接條件時,內連接不會把該記錄加入到最后的結果集中,而外連接會。外連接分為左(外)連接和右(外)連接。


          三種鏈接方式如下圖所示:

          2)獲取游標

          conn.cursor():獲取游標

          對數據庫進行操作,只連接數據庫是不夠的,還需要獲取操作數據庫的游標,才能進行后續的操作。游標的主要作用是用來接收數據庫操作后的返回結果,比如數據查詢、插入和刪除等。通過獲取到的數據庫連接實例 conn 下的 cursor() 方法來創建游標,如下:

          # 導入模塊
          import pymysql
          # 打開數據庫連接
          conn = pymysql.connect(
              host="127.0.0.1",
              user="root",
              password="123456",
              database="test_db",
              charset="utf8")
          # print(conn)
          # print(type(conn))
          # 獲取連接下的游標
          cursor_test = conn.cursor()
          print(cursor_test)

          3)數據庫操作

          • 創建表
          import pymysql
          # 打開數據庫連接
          conn = pymysql.connect(
              host="127.0.0.1",
              user="root",
              password="123456",
              database="test_db",
              charset="utf8")
          # 獲取連接下的游標
          cursor_test = conn.cursor()
          # 使用 execute() 方法執行 SQL,如果表存在則刪除
          cursor_test.execute("DROP TABLE IF EXISTS EMPLOYEE")
          # 使用預處理語句創建表
          sql = """CREATE TABLE user1 (
                   FIRST_NAME  CHAR(20) NOT NULL,
                   LAST_NAME  CHAR(20),
                   AGE INT,  
                   SEX CHAR(1),
                   INCOME FLOAT )"""
          cursor_test.execute(sql)
          # 關閉數據庫連接
          conn.close()

          如下所示數據庫表創建成功:

          mysql> desc user1;
          +------------+----------+------+-----+---------+-------+
          | Field      | Type     | Null | Key | Default | Extra |
          +------------+----------+------+-----+---------+-------+
          | FIRST_NAME | char(20) | NO   |     | NULL    |       |
          | LAST_NAME  | char(20) | YES  |     | NULL    |       |
          | AGE        | int(11)  | YES  |     | NULL    |       |
          | SEX        | char(1)  | YES  |     | NULL    |       |
          | INCOME     | float    | YES  |     | NULL    |       |
          +------------+----------+------+-----+---------+-------+
          5 rows in set (0.00 sec)
          • 插入數據
          import pymysql
          # 打開數據庫連接
          conn = pymysql.connect(
              host="127.0.0.1",
              user="root",
              password="123456",
              database="test_db",
              charset="utf8")
          # 獲取連接下的游標
          cursor_test = conn.cursor()
          # 使用預處理語句創建表
          sql = """INSERT INTO user1(FIRST_NAME,
                   LAST_NAME, AGE, SEX, INCOME)
                   VALUES ('Fei', 'Fei', 20, 'M', 1000)"""
          try:
             # 執行sql語句
             cursor_test.execute(sql)
             # 提交到數據庫執行
             conn.commit()
          except:
             # 如果發生錯誤則回滾
             conn.rollback()
          # 關閉數據庫連接
          conn.close()
          • 查詢數據
          import pymysql
          # 打開數據庫連接
          conn = pymysql.connect(
              host="127.0.0.1",
              user="root",
              password="123456",
              database="test_db",
              charset="utf8")
          # 獲取連接下的游標
          cursor_test = conn.cursor()
          sql = """
              select * from user1"""
          try:
              # 執行 sql 語句
              cursor_test.execute(sql)
              # 顯示出所有數據
              data_result = cursor_test.fetchall()
              for row in data_result:
                  fname = row[0]
                  lname = row[1]
                  age = row[2]
                  sex = row[3]
                  income = row[4]
                  # 打印結果
                  print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
                        (fname, lname, age, sex, income))
          except:
              print("Error: unable to fetch data")
          # 關閉數據庫連接
          conn.close()
          • 刪除操作
          # 導入模塊
          import pymysql
          # 打開數據庫連接
          conn = pymysql.connect(
              host="127.0.0.1",
              user="root",
              password="123456",
              database="test_db",
              charset="utf8")
          # print(conn)
          # print(type(conn))
          # 獲取連接下的游標
          cursor_test = conn.cursor()
          sql = "DELETE * FROM user1"
          try:
              # 執行SQL語句
              cursor_test.execute(sql)
              # 提交到數據庫執行
              conn.commit()
          except:
              # 發生錯誤時回滾
              conn.rollback()
          # 關閉數據庫連接
          conn.close()

          第二部分,我們來介紹如何實現「大量」數據的交互?

          《MySQL是怎樣運行的》,作者小孩子4919強調,嵌套循環連接算法是指驅動表只訪問一次,但被驅動表卻可能會訪問多次,訪問次數取決于驅動表執行單表查詢后的結果集中有多少條記錄,大致過程如下:


          步驟1,選取驅動表,使用與驅動表相關的過濾條件,選取代價最低的單表訪問方法來執行對驅動表的單表查詢;

          步驟2,對步驟1中查詢驅動表得到的結果集中的每一條記錄,都分別到被驅動表中查找匹配的記錄。

          由于被驅動表可能會訪問多次,因此可以為被驅動表建立合適的索引以加快查詢速度。

          所以,如果被驅動表非常大,即需要完成大量的數據交換,多次訪問被驅動表可能導致很多次的磁盤I/O讀取操作,此時可以使用基于塊的嵌套循環連接算法來緩解由此造成的性能損耗。Mysql的設計者,提出了名為Join Buffer(連接緩沖區)的概念:

          有興趣的同學,建議根據書中詳細描述走一遍。

          此外,人郵君特別建議大家看看《MySQL是怎樣運行的》,它解決了“為什么這個SQL語句執行得這么慢?為什么我明明建立了索引,但是查詢計劃顯示沒用?為什么IN查詢中的參數一多就不使用索引了?為什么我的數據顯示成了亂碼?”等等每一位DBA和后端開發人員在與MySQL打交道時,所遇到的很多常見問題。除此之外,索引結構、MVCC、隔離級別的實現、鎖的使用等知識,也是求職人員在MySQL面試中躲不過去的高頻問題,作者都在書中給出了很詳細的介紹。

          MySQL是怎樣運行的 從根兒上理解MySQL


          這本書的初稿最初是以小冊的形式發布在掘金平臺上的,一經發布便得到大家的青睞,十分火爆!歷經兩年,現在終于成書,有興趣的小伙伴也可以去掘金圍觀~(小孩子4919 的個人主頁)

          從底層到應用,從基礎到進階,關于MySQL的一切,作者都在書中講解得非常清楚,幫助你從根兒上理解MySQL。


          主站蜘蛛池模板: 亚洲av成人一区二区三区在线观看| 日韩一区二区精品观看| 精品国产一区二区三区久| 在线视频一区二区| 亚洲天堂一区二区三区| 欧美日韩一区二区成人午夜电影| 精品一区二区高清在线观看| 97av麻豆蜜桃一区二区| 精品久久综合一区二区| 熟妇人妻系列av无码一区二区| 久久精品国产一区二区三区肥胖| 国模少妇一区二区三区| 一本大道在线无码一区| 国产激情一区二区三区 | 国产精品女同一区二区| 精品久久久久久无码中文字幕一区| 秋霞鲁丝片一区二区三区| 日本免费一区二区久久人人澡| 无码av免费毛片一区二区| 日本视频一区二区三区| 国产精品高清一区二区人妖| 精彩视频一区二区| 亚洲不卡av不卡一区二区| 日本一区中文字幕日本一二三区视频 | 成人免费视频一区| 一区高清大胆人体| 中文字幕一区二区在线播放| 无码人妻精品一区二区蜜桃网站 | 国产一区在线观看免费| 亚洲高清日韩精品第一区| 国产成人一区二区三区视频免费| 国产精品日韩一区二区三区 | 怡红院一区二区在线观看| 少妇无码一区二区二三区| 国产一区二区三区精品视频| 国产av夜夜欢一区二区三区| 亚洲日韩一区二区一无码| 午夜福利av无码一区二区| 国产成人欧美一区二区三区| 91一区二区三区四区五区| 免费精品一区二区三区第35|