Python CGI 實(shí)戰(zhàn)三:PyMySQL實(shí)現(xiàn)登錄注冊

  • 在實(shí)戰(zhàn)二的基礎(chǔ)上蔫巩,加上PyMySQL數(shù)據(jù)庫對(duì)用戶登錄注冊的操作

最終效果

  • 建立數(shù)據(jù)庫pydemo,前端還是用實(shí)戰(zhàn)二那兩個(gè)界面(login.html和register.html)快压,編寫login_sql.py和register_sql.py兩個(gè)CGI腳本文件進(jìn)行數(shù)據(jù)庫的操作

第一步:建數(shù)據(jù)庫圆仔!

  • PyMySQL的安裝配置網(wǎng)上有挺多帖子的,如果建表也有很多介紹蔫劣,這里就不贅述了

  • 因?yàn)樘珣械么虼a來建表了坪郭,推薦可以使用這些傻瓜式建表的數(shù)據(jù)庫可視化工具:我使用的是Navicat Premium,安裝配置也可自行搜索~

  • 建立了一個(gè)pydemo庫脉幢,設(shè)計(jì)了users表歪沃,表中包含的內(nèi)容如下:


    image.png
  • ok!完成建表后就可以進(jìn)入編寫代碼嫌松!

第二步:小小修改login.html & register.html

  • 其實(shí)就是修改下點(diǎn)擊提交后沪曙,觸發(fā)的cgi文件路徑,將名字改成我們一會(huì)要編寫的這兩個(gè)cgi


    image.png

    image.png

第三步:編寫判斷用戶登錄的腳本文件 login_sql.py

  • 這里我遇到了個(gè)很大的關(guān)于import pymysql的坑萎羔,在pycharm里運(yùn)行不報(bào)錯(cuò)液走,一到打開cgi就報(bào)錯(cuò),查看apache的日志,報(bào)“沒有pymysql這個(gè)包”的錯(cuò)誤育灸,看到一個(gè)帖子也遇到了這樣的問題腻窒,指出是pycharm運(yùn)行的py版本是它自己的,而cgi似乎是運(yùn)行系統(tǒng)默認(rèn)那個(gè)py版本
  • 于是在終端install pymysql折騰了好久磅崭,給電腦里每個(gè)版本的python都安裝了pymysql儿子,但還是報(bào)錯(cuò)QAQ,最后互聯(lián)網(wǎng)海洋撈針砸喻,發(fā)現(xiàn)了import sys的方法引入pymysql柔逼!
  • 希望大家都比我好運(yùn)蛤,不會(huì)遇到那么多奇妙bug
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# CGI處理模塊
import cgi
# 我的電腦由于種種不可知原因割岛,即便給電腦中存在每個(gè)版本的python都import了pymysql愉适,運(yùn)行起來cgi還是會(huì)報(bào)錯(cuò)無pymysql,最后只好使用引用絕對(duì)路徑的方式引入pymysql
# 見仁見智癣漆,如果直接import pymysql成功則不需引入sys這兩句
import sys
sys.path.append("/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages")
import pymysql

# 創(chuàng)建 FieldStorage 的實(shí)例化
form = cgi.FieldStorage()
#獲取前端用戶輸入的數(shù)據(jù)
uname = form.getvalue("uname")
upass = form.getvalue("upass")

#連接數(shù)據(jù)庫
#這里的user维咸,password,db都是各有不同的蛤惠爽,需要修改你自己的庫信息
con = pymysql.connect(host='localhost', user='root', password='cyj123', db='pydemo', charset='utf8mb4',
                      cursorclass=pymysql.cursors.DictCursor)

try:
    with con.cursor() as cursor:
        #查找
        sql = "select password from users where email = %s"
        cursor.execute(sql, str(uname))
        con.commit()
        result = cursor.fetchone()

        print("Content-type:text/html")
        print('')
        print('<html>')
        print('<head>')
        print('<meta charset="utf-8">')

        if result == None or upass != result["password"]:
            print('<meta http-equiv="Refresh" content="3;url=/login.html">')
            print('<title>登錄</title>')
            print('</head>')
            print('<body>')
            print('<h>用戶名或密碼錯(cuò)誤癌蓖!正在跳轉(zhuǎn)至重新登錄界面...</h>')
        else:
            print('<title>登錄</title>')
            print('</head>')
            print('<body>')
            print('<h>登錄成功!<h>')

        print('</body>')
        print('</html>')

finally:
    con.close()


第四步:編寫判斷用戶注冊的腳本文件 register_sql.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# CGI處理模塊
import cgi
# 我的電腦由于種種不可知原因婚肆,即便給電腦中存在每個(gè)版本的python都import了pymysql租副,運(yùn)行起來cgi還是會(huì)報(bào)錯(cuò)無pymysql,最后只好使用引用絕對(duì)路徑的方式引入pymysql
# 見仁見智较性,如果直接import pymysql成功則不需引入sys這兩句
import sys
sys.path.append("/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages")
import pymysql

# 創(chuàng)建 FieldStorage 的實(shí)例化
form = cgi.FieldStorage()
#獲取前端用戶輸入的數(shù)據(jù)
rname = form.getvalue("rname")
rpass = form.getvalue("rpass")

#連接數(shù)據(jù)庫
#這里的user用僧,password,db都是各有不同的蛤赞咙,需要修改你自己的庫信息
con = pymysql.connect(host='localhost', user='root', password='cyj123', db='pydemo', charset='utf8mb4',
                      cursorclass=pymysql.cursors.DictCursor)

#判斷是否輸入空信息
if rname == None or rpass == None:
    print("Content-type:text/html")
    print('')
    print('<html>')
    print('<head>')
    print('<meta charset="utf-8">')
    print('<meta http-equiv="Refresh" content="3;url=/register.html">')
    print('<title>注冊</title>')
    print('</head>')
    print('<body>')
    print('<h>用戶名或密碼不得為空责循!正在跳轉(zhuǎn)至重新注冊頁面...<h>')
    print('</body>')
    print('</html>')
else:
    try:
        with con.cursor() as cursor:
            #先查詢是否已有相同賬戶
            sql = "select * from users where email = %s"
            cursor.execute(sql, str(rname))
            con.commit()
            result = cursor.fetchone()

            print("Content-type:text/html")
            print('')
            print('<html>')
            print('<head>')
            print('<meta charset="utf-8">')
            #若無,再進(jìn)行添加操作
            if result == None:
                sql = "insert into users (email,password) values (%s,%s)"
                cursor.execute(sql, (str(rname), str(rpass)))
                con.commit()
                print('<meta http-equiv="Refresh" content="1;url=/login.html">')
                print('<title>注冊</title>')
                print('</head>')
                print('<body>')
                print('<h>注冊成功攀操!正在跳轉(zhuǎn)至登錄頁面...</h>')
            else:
                print('<meta http-equiv="Refresh" content="1;url=/register.html">')
                print('<title>注冊</title>')
                print('</head>')
                print('<body>')
                print('<h>此賬號(hào)已存在院仿!正在跳轉(zhuǎn)至重新注冊頁面...<h>')

            print('</body>')
            print('</html>')

    finally:
        con.close()

結(jié)束!

run一下看看有無哪有問題叭崔赌!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末意蛀,一起剝皮案震驚了整個(gè)濱河市耸别,隨后出現(xiàn)的幾起案子健芭,更是在濱河造成了極大的恐慌,老刑警劉巖秀姐,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慈迈,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痒留,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門谴麦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伸头,你說我怎么就攤上這事匾效。” “怎么了恤磷?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵面哼,是天一觀的道長。 經(jīng)常有香客問我扫步,道長魔策,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任河胎,我火速辦了婚禮闯袒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘游岳。我一直安慰自己政敢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布吭历。 她就那樣靜靜地躺著堕仔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晌区。 梳的紋絲不亂的頭發(fā)上摩骨,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天萎河,我揣著相機(jī)與錄音剩愧,去河邊找鬼脖隶。 笑死夺颤,一個(gè)胖子當(dāng)著我的面吹牛医男,可吹牛的內(nèi)容都是我干的凿渊。 我是一名探鬼主播秤标,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揪阶,長吁一口氣:“原來是場噩夢啊……” “哼遣总!你這毒婦竟也來了睬罗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤旭斥,失蹤者是張志新(化名)和其女友劉穎容达,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垂券,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡花盐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片算芯。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柒昏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出熙揍,到底是詐尸還是另有隱情职祷,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布届囚,位于F島的核電站堪旧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奖亚。R本人自食惡果不足惜淳梦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昔字。 院中可真熱鬧爆袍,春花似錦、人聲如沸作郭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夹攒。三九已至蜘醋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咏尝,已是汗流浹背压语。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留编检,地道東北人胎食。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像允懂,于是被迫代替她去往敵國和親厕怜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)Django主要覺得該框架比較容易上手蕾总,還有Django-admin后臺(tái)方便使用粥航,但是有些時(shí)候我們用Djang...
    橙子丨Sunty閱讀 10,262評(píng)論 4 24
  • 一、創(chuàng)建項(xiàng)目 1.1.創(chuàng)建項(xiàng)目和app django-admin startproject mysite-logi...
    鵬ve閱讀 14,275評(píng)論 4 71
  • 廢話不多說生百,開始動(dòng)手叭 最終效果 要寫的內(nèi)容:用戶進(jìn)行登錄注冊的前端界面:login.html和register....
    CHASK閱讀 718評(píng)論 0 2
  • 模塊和包 一 模塊 1 什么是模塊置侍? 常見的場景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件映之,文件名就是...
    go以恒閱讀 2,274評(píng)論 0 4
  • 姓名:母光艷 公司:寧波貞觀電器 寧波盛和塾第235期,利他二組 【日精進(jìn)打卡第358天】 【知-學(xué)習(xí)】 誦讀《六...
    母光焱閱讀 72評(píng)論 0 0