期末做品檢查

1、我的學期總結

        在本學期中在missdu的帶領下,咱們學習了管理信息系統python這一課程,在這個課程中我發現,跟隨老師的步伐,在學習Python+Flask+MysqL的web建設時,咱們安裝了mySQL,pycharm和一些python的第三方庫,一開始接觸python咱們學的是簡單的輸出輸入交互和一些數字的計算,python語言優勢在於它的簡潔靈活,接着咱們瞭解turtle庫(海龜庫),在此環境中練習條件、循環、函數定義的代碼敲打,並畫出了五角星、同心圓、太陽花、中國國旗等。隨後便學習了字符串的基本操做,學會輸入字符串,輸出代碼計算後的結果。還學習了凱撒密碼、GDP格式化輸出、九九乘法表等簡單操做。利用python進行英文詞彙統計,組合數據類型練習,用文件形式實現完成的英文詞頻統計、中文詞頻統計。利用datetime處理日期和時間,將字符串轉化成imestamp與timedelta,同時瞭解管理信息系統概念與基礎,理解數據存儲的方式如字典、列表、元祖、集合,瞭解到Web是圖形化的和易於導航的、與平臺無關、是分佈式的、是動態的、是交互的。雖然語句都挺簡單,但這激發了咱們對學習python的興趣,並提高了咱們對編程語言的思惟能力,有助於下半學期咱們構建Flask框架製做網頁的學習。html

       學習初期第一方面,我認爲學習每一知識點的開始則是瞭解其知識點的概念及基礎。首先則是認識URL,觀察那些經常使用網站的網址,區分它們不一樣組成部分。而後,觀察web的瀏覽過程。最後,最爲重要的則是實操,瞭解HTML基礎並聯系使用標籤製做最簡單的頁面。自行了解各個標籤的用法以及總體標籤的規範。第二方面,認識div塊與form表單的做用,利用div塊與form表單製做登陸頁面。同時,練習使用各類列表,例以下拉列表選擇框、無序列表、有序列表以及定義列表。 觀察經常使用網頁的HTML元素,並在實操過程當中,用已學的標籤模仿製做。經過網絡搜索補充本身所想要的知識點,不要僅僅依賴於課堂。python

      開始Flask項目,加載靜態文件,父模板的繼承和擴展,鏈接mysql數據庫,建立用戶模型,創建mysql和app的鏈接。經過用戶模型,對數據庫進行增刪改查操做。完成註冊功能,將界面的數據存到數據庫,redirect重定向登陸頁。完成登陸功能,用session記住用戶名,像操做字典同樣操做‘session’:增長用戶名‘session[‘username’]’=username。登陸以後更新導航,用上下文處理器app_context_processor定義函數,獲取session中保存的值,返回字典,在父模板中更新導航,插入登陸狀態判斷代碼。完成註銷功能,清除session。發佈功能的實現,製做首頁的顯示列表,首頁列表顯示所有問答,完成問答詳情頁佈局,從首頁問答標題到問答詳情頁,完成評論功能,完成評論列表顯示及排序,我的中心顯示,我的中心標籤頁導航,完成我的中心—導航標籤,實現搜索功能(包括高級搜索等),最重要的是實現密碼加密功能,還有模型分離與數據遷移,使代碼更簡潔更有保存用戶的肯定狀態。mysql

      python,是一種面向對象的解釋型計算機程序設計語言,具備豐富和強大的庫。Python語法簡潔清晰,特點之一是強制用空白符(white space)做爲語句縮進。Flask是一個面向簡單需求小型應用的「微框架(microframework)」,Flask選擇組件的額外工做給那些使用案例不適用標準ORM的開發者提供了更多的靈活性,一樣也給使用不一樣工做流和模版化系統的開發者們帶來了靈活性。MySQL是一個關係型數據庫管理系統MySQL 是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件。MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。MySQL所使用的 SQL 語言是用於訪問數據庫的最經常使用標準化語言。web

     學習了python+flask web開發,感受計算機語言仍是有一點樂趣的,不至於很是枯燥無味的我覺的本身真正的學到了東西,重新手到會獨立完成本身的項目,過程當中遇到不少問題,查閱資料,問同窗以後都解決了, 雖然這個學期python課程學習結束了,可是對於我來講學習的程度不會止於此,我還要繼續學習python語言,由於這門語言對我來講吸引力很大,能夠做爲之後專門發展的方向,我以爲本身在語言方面還不夠規範跟熟練,還要繼續增強學習。sql

2、Python+Flask+MysqL的web建設技術過程總結

 一、使用工具

主要工具備:pycharm 、 MySQL 數據庫

建立數據庫mis_db編程

db.create_all()  # 測試是否鏈接成功

二、完成基本的頁面設計

(1)、導航條和註冊界面flask

# 註冊。
@app.route('/zhuce/', methods=['GET', 'POST']) # methods定義它有兩種請求方式,由於它在表單的請求是post,相似咱們在idea中的sava請求模式
def zhuce():
if request.method == 'GET':
return render_template('zhuce.html')
else:
username = request.form.get('user') # post請求模式,安排對象接收數據
password = request.form.get('pass')
nickname = request.form.get('nickname')
user = User.query.filter(User.username == username).first() # 做查詢,並判斷
if user:
return u'該用戶已存在'
else:
user = User(username=username, password=password, nickname=nickname) # 將對象接收的數據賦到User類中,即存到數據庫
db.session.add(user) # 執行操做
db.session.commit()
return redirect(url_for('denglu')) # redirect重定向

                                                                                

 用戶名和密碼只能  6—20位功能網絡

      

                         密碼不一致功能                                                                                                                                    session

             

(2)、登陸界面

# 登陸。
@app.route('/denglu/', methods=['GET', 'POST'])  # methods定義它有兩種請求方式
def denglu():
    if request.method == 'GET':
        return render_template('denglu.html')
    else:
        username = request.form.get('user')  # post請求模式,安排對象接收數據
        password1 = request.form.get('pass')
        user = User.query.filter(User.username == username).first()  # 做查詢,並判斷
        if user:  # 判斷用戶名
            if user.check_password(password1):  # 判斷密碼
                session['user'] = username  # 利用session添加傳回來的值username
                session.permanent = True  # 設置session過時的時間
                return redirect(url_for('daohang'))
            else:
                return u'用戶密碼錯誤'
        else:
            return u'用戶不存在,請先註冊'

    用戶名和密碼只能6—20位功能

                      

(3)、發佈問答界面

# 發佈。
@app.route('/fabu/', methods=['GET', 'POST'])  # methods定義它有兩種請求方式
@loginFirst  # 將decorator定義的加強函數放在待加強函數定義的上面
def fabu():
    if request.method == 'GET':
        return render_template('fabu.html')
    else:
        title = request.form.get('title')  # post請求模式,安排對象接收數據
        detail = request.form.get('detail')
        author_id = User.query.filter(
            User.username == session.get('user')).first().id  # 將session get到的user進行查詢並取出id放到外鍵author_id中
        fabu = Fabu(title=title, detail=detail, author_id=author_id)  # 將對象接收的數據賦到Fabu類中,即存到數據庫
        db.session.add(fabu)  # 執行操做
        db.session.commit()  # 提交到數據庫
        return redirect(url_for('daohang'))  # redirect重定向

                                             

(4)、評論頁面

# 評論
@app.route('/comment/', methods=['POST'])
@loginFirst
def comment():
    detail = request.form.get('pinglun')
    author_id = User.query.filter(User.username == session.get('user')).first().id
    fabu_id = request.form.get('hidden_id')
    comment = Comment(detail=detail, author_id=author_id, fabu_id=fabu_id)
    db.session.add(comment)  # 執行操做
    db.session.commit()  # 提交到數據庫
    return redirect(url_for('detail', question_id=fabu_id))

                                                                         

(5)、我的中心界面

# 我的中心
@app.route('/usercenter/<user_id>/<tag>')
@loginFirst
def usercenter(user_id, tag):
    user = User.query.filter(User.id == user_id).first()
    context = {
        'user_id': user.id,
        'username': user.username,
        'fabus': user.fabu,
        'comments': user.comments
    }
    if tag == '1':
        return render_template('usercenter1.html', **context)
    elif tag == '2':
        return render_template('usercenter2.html', **context)
    else:
        return render_template('usercenter3.html', **context)

                                              

(6)、搜索界面

# 搜索
@app.route('/search/')
def search():
    qu = request.args.get('q')
    ques = Fabu.query.filter(
        or_(
            Fabu.title.contains(qu),
            Fabu.detail.contains(qu)
        )
    ).order_by('-creat_time')
    return render_template('daohang.html', fabus=ques)                                  

                                                            

 

(7)、圖片區界面

# 圖片。
@app.route('/tupian/')
def tupian():
    return render_template('tupian.html')

                                                                                              

(8)、修改密碼界面

# 修改密碼
@app.route('/xiugai/<user_username>',methods=['GET','POST'])
def xiugai(user_username):
    user=User.query.filter(User.username==user_username).first()
    if request.method == 'GET':
        return render_template('xiugai.html',user=user)
    else:
        password=user.password=request.form.get('password')
        db.update(password)
        db.session.commit()
        return redirect(url_for('denglu'))

                                         

(9)、設置界面     

      <ul class="dropdown-menu">
                        <li><a href="{{ url_for('fabu') }}">繼續發佈</a></li>
                        <li><a href="{{ url_for('tupian') }}">上傳圖片</a></li>
                    </ul>

                                                                                                                         點擊「繼續發佈」會跳轉發布界面,點擊「上傳圖片」會跳轉圖片區界面

                                                                                           

三、經過用戶模型,對數據庫進行增刪改查

'''
# 插入功能
user = User(username='15',password='12')
db.session.add(user)
db.session.commit()

# 查詢功能
user=User.query.filter(User.username=="15").first()
print(user.username,user.password)

# 修改功能
user=User.query.filter(User.username=="15").first()
user.password='888'
db.session.commit()

# 刪除功能
user=User.query.filter(User.username=="15").first()
db.session.delete(user)
db.session.commit()
'''

四、密碼保護

 
 
from werkzeug.security import generate_password_hash,check_password_hash
_password = db.Column(db.String(200), nullable=False) # 內部使用
 
    # 定義屬性 password:
    @property
    def password(self):  # 外部使用
        return self._password

    @password.setter
    def password(self, row_password):
        self._password = generate_password_hash(row_password)

    def check_password(self, row_password):
         result = check_password_hash(self._password, row_password)
         return result

                   

五、數據庫配置信息config.py

import os
DEBUG = True

SECRET_KEY = os.urandom(24)

DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = 'ROOT'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'mis_db'

# 配置和數據庫的鏈接信息
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@localhost/mis_db?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = False

 

以上是我這學期的所學。經過missdu的教學,我基本熟悉python的基礎操做,感謝杜老師的耐心教導。

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