4 - 学生は、Djangoの小さなノートデータベースの管理を学ぶ②

前  Djangoは少しノート、3-学生管理データベースを学習①  私たちは、最も基本的な単一テーブルの操作を述べました。多くの場合に多く、多くは実際にあります。

これは、手術台に接続されたマルチテーブルに関する。

理解:フォームが送信されたフォーム、ページの内容が更新されます。

1.ビュー

mysqlの>  SELECT  *  FROM学生LEFT  JOINのクラスをON student.`class_ID` = class.`id`。
+ - - + ----------- + ---------- + ------ + -------------- --- + 
| ID | 名前       | CLASS_ID | ID    | タイトル            | 
+ - - + ----------- + ---------- + ------ + -------------- --- + 
|   1  |张英杰     |         9  |     9  |全栈12期1222     | 
+ -- + ----------- + ---------- + ------ + ----------------- + 
1 セット0.00 秒)

MySQLの> SELECT student.id、student.name、学生左からclass.titleはstudent.`class_ID` = cllass.`id` ONクラスに参加します。
+ ---- + ----------- + ----------------- +
| ID | 名前| タイトル|
+ ---- + ----------- + ----------------- +
| 1 | 张英杰| 全栈12期1222 |
+ ---- + ----------- + ----------------- +
セットにおける1行(0.00秒)

だから、データベース内のステートメントに置き換えることができます。

展示学生
デフ学生(リクエスト):
     インポートpymysql 
    CONN = pymysql.connect(ホスト= ' 10.0.4.x '、ポート= 3306、ユーザー= ' ルート'は、passwd = '123 @#123 '、DB = " oldboys '文字セット= ' UTF8 " 
    カーソル = conn.cursor(カーソル= pymysql.cursors.DictCursor)
    cursor.execute(学生左からSELECT student.id、student.name、class.title student.`class_ID` ONクラスに参加= class.`id` "
    student_list= cursor.fetchall() 
    ()cursor.close 
    はconn.close()

    リターン(要求、レンダリング' students.html ' { ' student_list ':student_listを})

 

2.追加

add_student.html:ページは、ユーザーが自分のクラスを追加することを可能にするときは、<選択> <オプション>タグが実装され、ドロップダウンボックスを設定することができます

<!DOCTYPE HTML > 
< HTML LANG = "EN" > 
< > 
    < メタ文字コード= "UTF-8" > 
    < タイトル>添加学生</ タイトル> 
</ ヘッド> 
< 身体> 
    < H1 >增加学生</ H1 > 
    < フォームメソッド= "POST" アクション= "/ add_student /" > 
        < P >学生姓名<= "名前" /> </ P > 
        < P > 所属班级:
             < 選択= "CLASS_ID" > 
                {class_list%で行の%} 
                    < オプション= "{{row.id}}" > {{行。タイトル}} </ オプション> > 
                {%ENDFOR%} 
            </ 選択> 
        </ P > 
        < 入力タイプ= "提出" = "提交" > 
    </ 構成> 
</ ボディ> 
</ htmlの>

注:ラベルを選択し、学生がキーとして名前を提出して、値として提出するCLASS_ID、CLASS_IDプロパティに参加しました。

views.pyはadd_student機能を追加しました:

...
 、学生を追加するには、ドロップダウンボックスの
DEFのadd_student(要求):
     IFは == request.method GETを
     データベースによって埋め位add_student.htmlにクラス名]ドロップダウンボックスの値を抽出するために
インポートpymysql でCONN =ホストpymysql.connect(= ' 10.0.4.x '、ポート= 3306、=ユーザー' ルート'は、passwdは= ' #123 @ 123!'、DB = ' oldboys '、文字セットが= ' UTF8 ' カーソル = conn.cursor(=カーソル pymysql。 cursors.DictCursor) cursor.execute(" クラスから選択ID、タイトル" class_list = cursor.fetchall() ()cursor.close はconn.close() リターンレンダリング(要求、' add_student.html ' { ' class_list ' :class_listを}) = request.POST.get(' 名前' CLASS_ID = request.POST.get(' CLASS_ID '      #提交至数据库 輸入pymysql CONN = pymysql.connect(ホスト= " 10.0.4.x '、ポート= 3306、ユーザー= ' ルート'は、passwd = ' #123 @ 123!'、DB = ' oldboys '、文字セット= ' UTF8 ' カーソル = CONN .CURSOR(カーソル= pymysql.cursors.DictCursor) cursor.execute(" 学生への挿入(名前、CLASS_ID)値(%S、%S)" 、[名前、CLASS_ID]) conn.commit() cursor.close() conn.close() の戻りリダイレクト(' /学生/ '

実際には、すべての時間があまりにもあなたがutilsのディレクトリsqlheper.pyという名前のパッケージにそれらを置くことができ、データベースの操作が面倒

 sqlheper.py

import pymysql

#fetchall
def get_list(sql,args):
    conn = pymysql.connect(host='10.0.4.x', port=3306, user='root', passwd='123!@#123', db='oldboys',charset='utf8')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute(sql,args)
    result = cursor.fetchall()
    cursor.close()
    conn.close()
    return result

#fetchone
def get_one(sql,args):
    conn = pymysql.connect(host='10.0.4.x', port=3306, user='root', passwd='123!@#123', db='oldboys',charset='utf8')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute(sql,args)
    result = cursor.fetchone()
    cursor.close()
    conn.close()
    return result

#commit
def modify(sql,args):
    conn = pymysql.connect(host='10.0.4.x', port=3306, user='root', passwd='123!@#123', db='oldboys',charset='utf8')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute(sql,args)
    conn.commit()
    cursor.close()
    conn.close()

 

 

 

Ajax (jQuery)

“页面不刷新的情况下偷偷提交数据”

おすすめ

転載: www.cnblogs.com/ethtool/p/12132472.html