期末做品檢查

我的總結html

通過一個學期以來,自我感受有了很大的進步,在必定程度上可以掌握理解老師上課所講的內容而且可以順利的在本身的電腦上操做;在這個本身動手的實踐操做中意識到我還存在不少的不足,如課後做業以及一些操做會很依賴上課的截圖,可是之後會增強動手實踐的能力,鞏固我對python語言的掌握;我我的把這學期所學的東西分爲三大部分:前期對Python的基礎語法練習,中期動手製做網頁,後期Flask項目主程序和數據庫的鏈接;前端

在期末我對我本學期所學的知識進行了一次簡單的梳理,梳理的內容以下:python

前期Python基礎語法練習web

  1. 輸出交互以及簡單的運算
  2. Turtle庫的基礎內容,它是一個簡單的繪圖工具,只要熟悉畫筆的幾種命令:一種爲運動命令,一種爲畫筆控制命令,還有一種是全局控制命令就能夠畫不少本身想畫的東西;在此基礎上能夠運用條件、循環、函數定義使得繪畫更加美化;其實這個很簡單,並且能夠爲所欲爲畫本身喜歡的圖畫,也是至關有趣提升,能夠咱們想要學習python的興趣;
  3. 對字符串的基礎操做,處理;如:輸入身份證號,識別地區、年齡、性別等;我的感受這個是很是實用的,咱們的專業是信息管理與信息系統,之後要是專業對口的話,就會接觸不少的數據,因此咱們
  4. 凱撒密碼,GDP格式化輸出以及輸出九九乘法表;
  5. 學習了python的列表和元組,對詞頻的統計,轉換符號,將全部大寫轉換爲小寫,統計某幾個單詞出現的次數,分隔出一個一個的單詞;
  6. 在詞頻的統計上,進行了讀入,分解,寫計數字典,排除語法型詞彙,排序的基礎功能;
  7. Datetime處理時間和日期,能夠獲取datetime以及將datetime類型轉換成字符串,將字符型轉換成datetime類型;

中期的基礎網頁製做正則表達式

  1. 學習web的基礎,認識URL,觀察經常使用網站網址,區分不一樣組成部分。觀察web的瀏覽過程,學習HTML基礎使用簡單的標籤製做頁面;
  2. 觀察經常使用網頁的HTML元素,在實際的應用場景中,用已學的標籤模仿製做。用div,form製做登陸頁面,練習使用下拉列表選擇框,無序列表,有序列表,定義列表。
  3. 對網頁的美化:導航,頭部,美化,圖片導航塊,JavaScript基礎(三種用法:放在<body>和<head>和外部的JS文件中),登陸驗證,登陸註冊頁面的完成

後期的Flask項目主程序和數據庫的鏈接數據庫

  1. 新建Flask項目,調式模式,使用裝飾器,設置路徑與函數之間的關係,使用使用Flask中render_template,用不一樣的路徑,返回首頁、登陸員、註冊頁,用視圖函數反轉獲得URL,url_for(‘login’),完成導航裏的連接;
  2. 加載靜態文件,父模板的繼承和擴張,在編程的過程當中,咱們常常會重複性的寫了不少的代碼,好比一個頁面的框架部分,這樣我又多少個頁面就得寫上多少次,這樣既很差維護,也不夠高效,因此咱們引出了html的模板繼承部分。這個比較簡單可是繼承的位置要有清楚的思路;
  3. 完成註冊與登陸功能,利用JavaScript對輸入格式進行判斷, onclick函數return True時才提交表單,return False時不提交表單。

    JavaScript是一門基於原型、函數先行的語言,是一門多範式的語言,它支持面向對象編程,命令式編程,以及函數式編程。它提供語法來操控文本、數組、日期以及正則表達式等,不支持I/O,好比網絡、存儲和圖形等,但這些均可以由它的宿主環境提供支持。編程

    JavaScript雖與Java有不少類似性,但這兩門編程語言從設計之初就有很大的不一樣,JavaScript的語言設計主要受到了Self(一種基於原型的編程語言)和Scheme(一門函數式編程語言)的影響。在語法結構上它又與C語言有不少類似(例如if條件語句、while循環、switch語句、do-while循環等)數組

    function fozhuce() {
                var oUname = document.getElementById("uname");
                var oError = document.getElementById("error_box");
                var oUpass = document.getElementById("upass");
                var oUpass1 = document.getElementById("upass1");
                var isError = true;
                oError.innerHTML = "<br>";
    
                if (oUname.value.length < 6 || oUname.value.length > 20) {
                    oError.innerHTML = "用戶名要6-20位";
                    isError = false;
                    return isError;
                }else if(oUname.value.charCodeAt(0)>=48 &&(oUname.value.charCodeAt(0)<=57)){
                    oError.innerHTML="首位不能爲數字";
                    isError = false;
                    return isError;
                }else for (var i=0;i<oUname.value.length;i++){
                   if((oUname.value.charCodeAt(i)<48)||(oUname.value.charCodeAt(i)>57)&&(oUname.value.charCodeAt(i)<58)&&(oUname.value.charCodeAt(i)>97)){
                    oError.innerHTML="只能爲數字和字母";
                    isError = false;
                    return isError;
                   }
                }if (oUpass.value.length < 6 || oUpass.value.length > 20) {
                    oError.innerHTML = "密碼要6-20位";
                    isError = false;
                    return isError;
                }else if(oUpass.value!=oUpass1.value) {
                    oError.innerHTML = "設置密碼和驗證密碼不一致";
                    isError = false;
                    return isError;
                }
                return ture;
                }

     

  4. 在HTML中的<form>中設置 action和method="post",在py主程序當中判斷用戶是否存在,保存到數據庫當中,利用redirect重定向到登陸頁,進行登陸功能因爲我我的以爲理論也是學好一門知識的基礎,在這裏介紹一下method屬性:瀏覽器使用 method 屬性設置的方法將表單中的數據傳送給服務器進行處理。共有兩種方法:POST 方法和 GET 方法。

         可是是用post仍是get方法呢,我剛剛接觸到這個我也老是分不清該用哪種方法,接下來說一下我查閱資料而發現的規律:   瀏覽器

  • 若是但願得到最佳表單傳輸性能,能夠採用 GET 方法發送只有少數簡短字段的小表單。
  • 一些服務器操做系統在處理能夠當即傳遞給應用程序的命令行參數時,會限制其數目和長度,在這種狀況下,對那些有許多字段或是很長的文本域的表單來講,就應該採用 POST 方法來發送。
  • 若是你在編寫服務器端的表單處理應用程序方面經驗不足,應該選擇 GET 方法。若是採用 POST 方法,就要在讀取和解碼方法作些額外的工做,也許這並不很難,可是也許你不太願意去處理這些問題。
  • 若是安全性是個問題,那麼咱們建議選用 POST 方法。GET 方法將表單參數直接放在應用程序的 URL 中,這樣網絡窺探者能夠很輕鬆地捕獲它們,還能夠從服務器的日誌文件中進行摘錄。若是參數中包含了信用卡賬號這樣的敏感信息,就會在不知不覺中危及用戶的安全。而 POST 應用程序就沒有安全方面的漏洞,在將參數做爲單獨的事務傳輸給服務器進行處理時,至少還能夠採用加密的方法。
  • 若是想在表單以外調用服務器端的應用程序,並且包括向其傳遞參數的過程,就要採用 GET 方法,由於該方法容許把表單這樣的參數包括進來做爲 URL 的一部分。而另外一方面,使用 POST 樣式的應用程序卻但願在 URL 後還能有一個來自瀏覽器額外的傳輸過程,其中傳輸的內容不能做爲傳統 <a> 標籤的內容。

其實我本身是用了一種很通俗的理解,若是關係到數據的更改的話就採用post,沒有涉及到數據的更改就採用get;雖然這種通俗存在很大的片面,可是自我感受對新手菜鳥級的來講仍是能夠嘗試的;安全

  1. @app.route('/denglu/', methods=['GET', 'POST'])
    def denglu():
        if request.method == 'GET':
            return render_template('denglu.html')
        else:
            username = request.form.get('username')
            password = request.form.get('password')
            user = User.query.filter(User.username == username).first()
            # 判斷用戶名是否存在
            if user:
                if user.check_password(password):
                    session['user'] = username
                    session['id'] = user.id
                    session.permanent = True
                    return redirect(url_for('shouye'))
                else:
                    return '密碼錯誤'
            else:
                return '此用戶不存在'

    5.完成了登陸功能,用session記住用戶名,讀取表單數據查詢數據庫判斷用戶密碼,導入session,設置secret_key,操做字典同樣操做`session`:增長用戶名session['username']=username,在這裏我想談談session,一開寫註冊與登陸功能的時候,以下圖:

user = User(username=username, password=password)
db.session.add(user)
db.session.commit()
return redirect(url_for('denglu'))

對session有了一個只是把數據記錄寫到數據庫的片面理解,但是後來我把登陸功能寫好後也遲遲沒有深入的理解session究竟是什麼含義,在這一點上能夠看得出我對學習仍是很被動;在完善期末做品當中我發現了不少不足,雖然做品完成了可是對於知識點仍是有不少的缺失,就如session,它的工做原理以下:

當一個session第一次被啓用時,一個惟一的標識被存儲於本地的cookie中。

隨着愈來愈多用戶登陸,Session 所須要的服務器內存量也會不斷增長。訪問 Web應用程序的每一個用戶都生成一個單獨的 Session 對象。每一個 Session 對象的持續時間是用戶訪問的時間加上不活動的時間。若是每一個 Session 中保持許多對象,而且許多用戶同時使用 Web應用程序(建立許多 Session),則用於 Session 持久性的服務器內存量可能會很大,從而影響了可伸縮性。

Session 是存儲在服務器端的,遠程用戶沒辦法修改 session 文件的內容,所以咱們能夠單純存儲一個 $admin變量來判斷是否登錄,首次驗證經過後設置 $admin 值爲 true,之後判斷該值是否爲 true,假如不是,轉入登錄界面,這樣就能夠減小不少數據庫操做了。並且能夠減小每次爲了驗證 Cookie 而傳遞密碼的不安全性了(session 驗證只須要傳遞一次,假如你沒有使用 SSL 安全協議的話)。即便密碼進行了 md5 加密,也是很容易被截獲的。

6.製做首頁的顯示列表,並在首頁列表所有問答,將數據庫查詢結果傳遞到前端頁面 Question.query.all(),前端頁面循環整個列表,完成發佈詳情頁的頁面佈局,對展現在列表的東西進行搜索;其實對於搜索,還有不少東西不瞭解,如怎麼進行對數據高級搜索,例如像博客園的搜索一個月的,一個星期的等等,這些都是值得我進行深入摸索學習的;

以上的幾點是我對我本學期所學到知識進行梳理,在這個過程當中也遇到過不少問題,一些看起來不覺得然的問題也會形成系統出現不少錯誤,須要咱們仔細耐心對待,如在命令行建立新的數據庫:create database reader;這樣看彷佛沒有錯誤,可是在添加文字時就會出現報錯;這是因爲一些編碼的緣由,當初我就由於創建數據庫時沒讓它是utf8編碼致使添加文字頻頻報錯,因此建數據庫是寫的應該是:create database reader charset utf8;這個小失誤讓我浪費了不少時間在檢查上,在學習編碼的路上必定要當心謹慎,細緻纔會提升效率走得更遠;還有一些配置問題如在配置當中已經在設置配置好的project Interpreten,但是仍是會報錯,就應該學會在workspace中找到一些相關的配置問題進行手動添加,報錯信息和配置截圖如圖所示:

 

 

在個人學習生涯中接觸到的第一母語Java,可是我對Java彷佛有一種與生俱來恐懼感,到至今我仍然會以爲它很難,是python改變了我對代碼很難學的很難理解的見解,相對於Java的 高冷拒人千里以外,python語言算得學習門檻低得感人了,感受是任何人是隻要想學習,能夠在幾天裏學會不少基礎知識,如上面我所梳理到的使用Turtle庫的進行繪畫,對一些字符串進行操做,對字符串的基礎操做,處理;如:輸入身份證號,識別地區、年齡、性別等;可是也不能所以由於python好學而對它掉以輕心,全部的事情都有一個厚積薄發的過程,多動手實踐很重要,代碼若是不常常練習就會很生疏,就好像開學老師說的一些時間類型,Datetime處理時間和日期,能夠獲取datetime以及將datetime類型轉換成字符串,將字符型轉換成datetime類型,對那些類型每次都得找一些記錄纔會想起來,因此必定要常常實踐;

其實在大學這有限的時間裏老師可以傳授的知識是頗有限,想要學好一門技術,只是掌握老師上課所說的知識是遠遠不夠的,要讓自已有很強的 自主學習能力;在前不久據說了一條新聞,在山東的一些小學裏,python已經寫進書本了,連小學生都學習python了,咱們做爲一名大學生更應該付出更多的努力去學習python,我也會對此付諸於行動證實;

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息