tornado 08 數據庫-ORM-SQLAlchemy-表關系和簡單登錄注冊

tornado 08 數據庫-ORM-SQLAlchemy-表關系和簡單登錄注冊

引言

#在數據庫,所謂表關系,只是人為認為的添加上去的表與表之間的關系,只是邏輯上認為的關系,實際上數據庫里面的表之間并沒有所謂的表關系

一、一對一表關系

  Module

#需要先創建對應的Module,這里采用之前建立好的User和UserDetails

relationship
from sqlalchemyorm import relationship #在Userdatails中添加如下代碼:
userdetail = relationship('User',backref='details',uselist=False,cascade='all')#使用 
row = session.query(User).get(1)
rows.details

  relationship

    userdetail = relationship('User',backref = 'details',uselist=False,cascade='all') #在使用relationship的時候上面必須要有ForeignKey
#類名 User,表示關聯的Module
# 在子類中通過relationship里面的backref向父類User加上details這個屬性
#uselist=False 代表relationship不再表示一對多關系了,表示一對一的關系了
#cascade表示自動關系處理,就和mysql中的ON DELETE 類似
#cascade所有的可選字符串項:1、all,所有操作都會自動處理到關聯對象上;2、save_update,關聯對象自動添加到會話;3、delete,關聯對象自動從會話中刪除;4、delete-orphan,屬性中去掉關聯對象,則會話中會自動刪除關聯對象;5、merge,session.merge()是會處理關聯對象;6、refresh-expire,session.expire()時會處理關聯對象;7、expunge,session.expunge()時會處理關聯對象#自動添加屬性
#在剛才這里,User里面本來是沒有details這個屬性的,但是在UserDetails里面添加relationship之后,User實例會自動添加上details屬性#relationship
#表關系是邏輯關系,但是mysql中并沒有直接說明表關系的東西,外鍵約束是一個表現形式,外鍵是一種表之間的約束,可以用來表示這種關系
#在SQLAlchemy里面,這個relationship代表了一對多的關系,當然我們可以通過參數改變關系,它默認為是一對多的關系,而這個關系是SQLAlchemy里面的,和數據庫并沒有什么關系,但是relationship是和外鍵一起使用的

#在relationship.py中輸入一下代碼from connect import session
from user_modules import User,UserDetailsrows = session.query(User).get(2) #獲得id為2的數據信息
print(rows)
print(rows.username)
print(rows.details)rows = session.query(UserDetails).get(1)
print(rows)
print(rows.userdetail) #只要確定好一對一的關系,子類的userdetail和父類的details屬性都可以得到對應的數據

二、多對多關系

#用戶與服務器之間的關系可以看成是一對多的關系,但是用戶轉載的關系就可以看成是多對多的關系,如何在SQLAlchemy表示多對多的關系呢
#在user_modules.py里面添加,記得要導入Table模塊
from sqlalchemy import Tableuser_article = Table('user_article',Base.metadata,Column('user_id',Integer,ForeignKey('user.id'),primary_key=True),Column('article_id',Integer,ForeignKey('article.id'),primary_key=True)) #中間表寫法class Article(Base): #文章Module__tablename__ = 'article'id = Column(Integer,primary_key=True,autoincrement=True)content = Column(String(500),nullable=True)create_time = Column(DateTime,default=datetime.now)article_user = relationship('User',backref='article',secondary=user_article)#跟上面的區別在于沒有uselist,secondary參數傳入中間表def __repr__(self):return 'Article(id=%s,content=%s,create_time=%s)'%(self.id,self.content,self.create_time)

三、包管理

#把Module寫好以后,該如何導入呢
#在模塊中直接導入:
from data.user_modules import User #從data包下面的user_modules.py里面導入User
#這就會涉及到包管理#包的概念
#把很多模塊放到一個文件夾里面,就可以形成一個包#包管理
#當把很多模塊放在文件夾中的時候,為了方便引用包中的模塊,引入包管理__init__.py
#在包管理中,加入此模塊,則包名可以直接通過屬性訪問的方式,訪問此模塊內的對象,此模塊不加上可能不會報錯,但是規范是要加上,文件內容可以為空#相對路徑導入
#在包管理中,可以通過.(一個點)和..(兩個點)分別來導入同層和上一層的模塊
#相對路徑導入#引入作用
#在包中,如果包中模塊要導入同一包中的其他模塊,就必須使用此方法導入#使用方法
from .module(..module) import obj (as new_name)#引入以后的影響
#當一個模塊中出現此導入方式,則該模塊不能被直接運行,直接被導入

四、簡單的登錄

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define,options
import time
import util.ui_methods
import util.ui_modules
from data.user_modules import User #導入module包
define('port',default=8080,help = 'run port',type=int)
def haha():return 'this is hahahaah'class LoginHandler(tornado.web.RequestHandler):def get(self, *args, **kwargs):self.render('lesson2.html')def post(self, *args, **kwargs):user = self.get_arguments('name')password = self.get_argument('password','')username =User.by_name(user)if username and password == username[0].password:self.render('login_07.html',username = username)else:self.write('用戶名或密碼錯誤')application = tornado.web.Application(handlers=[(r'/login',LoginHandler),],template_path = 'templates',static_path= 'static',autoescape = None,ui_methods=util.ui_methods,ui_modules=util.ui_modules,debug=True)if __name__ == '__main__':tornado.options.parse_command_line()http_server = tornado.httpserver.HTTPServer(application)http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="css/bootstrap.css"><style>* {margin: 0;padding: 0;}</style>
</head>
<body>{% if username %}歡迎用戶{{ username }}登錄<br><img src="{{ static_url('images/1.jpg')}}" width="250" height="250"><br>{% else %}您還沒有登錄{% end %}
</body>
</html>
#在user_module.py里面導入
from .connect import Base,session#在User類里面寫入
    @classmethoddef by_name(cls,name):return  session.query(cls).filter(cls.username==name).all() #通過裝飾器來獲取類名

?

轉載于:https://www.cnblogs.com/xuchengcheng1215/p/9028537.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278015.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278015.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278015.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Teams的manifest文件開始支持多語言

Teams發展速度飛快&#xff0c;Teams app的manifest文件schema也迎來了版本1.5&#xff0c;在這個版本里&#xff0c;很大的一個改進是支持多語言。 讓我們一起來看看&#xff0c;如何在manifest文件里配置多語言。 1&#xff0c;我們需要先把manifest文件設置成v1.5 {"…

白白的(baibaide)

白白的&#xff08;baibaide&#xff09; 有一個長度為 $n$ 的序列 $a_1, a_2, \dots, a_n$&#xff0c;一開始每個位置都是白色。如果一個區間中每個位置都是白色&#xff0c;則稱這是一個白白的區間。如果一個白白的區間向左或向右延長后都不是白白的區間了&#xff0c;則稱這…

如何利用Python網絡爬蟲爬取微信朋友圈動態--附代碼(下)

前天給大家分享了如何利用Python網絡爬蟲爬取微信朋友圈數據的上篇&#xff08;理論篇&#xff09;&#xff0c;今天給大家分享一下代碼實現&#xff08;實戰篇&#xff09;&#xff0c;接著上篇往下繼續深入。一、代碼實現1、修改Scrapy項目中的items.py文件。我們需要獲取的數…

使用Adaptive cards來構建Teams app的界面

Teams app的task module十分好用&#xff0c;當用戶點擊了一個卡片上的按鈕是可以在Teams里彈出一個對話框&#xff0c;對話框的內容可以是開發人員自己的一個網頁頁面&#xff0c;或者是adaptive card。 在我的LuckyDraw bot里&#xff0c;我比較了這兩種的優勢和劣勢&#xf…

Boosting(提升方法)之GBDT

一、GBDT的通俗理解 提升方法采用的是加法模型和前向分步算法來解決分類和回歸問題&#xff0c;而以決策樹作為基函數的提升方法稱為提升樹&#xff08;boosting tree&#xff09;。GBDT(Gradient Boosting Decision Tree)就是提升樹算法的一種&#xff0c;它使用的基學習器是C…

CC攻擊原理及防范方法

一、 CC攻擊的原理&#xff1a; CC攻擊的原理就是攻擊者控制某些主機不停地發大量數據包給對方服務器造成服務器資源耗盡&#xff0c;一直到宕機崩潰。CC主要是用來消耗服務器資源的&#xff0c;每個人都有這樣的體驗&#xff1a;當一個網頁訪問的人數特別多的時候&#xff0c…

Team photo的新api

Graph API的更新速度真是快&#xff0c;今年9月中旬又增加了關于Team photo的兩個新的api。 https://docs.microsoft.com/en-us/graph/api/team-get-photohttps://docs.microsoft.com/en-us/graph/api/team-update-photo 今天就給大家介紹一下如何使用這兩個新的api。 實際上說…

BZOJ 1047: [HAOI2007]理想的正方形 單調隊列瞎搞

題意很簡明吧&#xff1f; 枚舉的矩形下邊界和右端點即右下角&#xff0c;來確定矩形位置&#xff1b; 每一個縱列開一個單調隊列&#xff0c;記錄從 i-n1 行到 i 行每列的最大值和最小值&#xff0c;矩形下邊界向下推移的時候維護一下&#xff1b; 然后在記錄的每一列的最大值…

分享到Teams

在今年三月份末&#xff0c;Teams的官方文檔推出了一個新功能&#xff1a;將網頁&#xff08;一個URL&#xff09;分享到Teams里。 也就是說開發人員現在可以很方便的開發一個頁面&#xff0c;頁面里有一個Teams的圖標&#xff0c;當訪問此頁面的最終用戶點擊這個圖標后可以將…

xshell使用xftp傳輸文件和使用pure-ftpd搭建ftp服務

xshell使用xftp傳輸文件 首先安裝xftp&#xff0c;然后建立會話&#xff0c;步驟和xshell一樣&#xff0c;在使用的時候用CtrlALTf呼出&#xff0c;左邊是windows桌面&#xff0c;右面是linux&#xff0c;雙擊或拖拽都可以實現命令互傳。 使用pure-ftpd搭建ftp服務 首先安裝yum…

MySQL命令行查詢亂碼解決方法

轉自Agoly的博客&#xff0c;原文鏈接https://www.cnblogs.com/qmfsun/p/4846467.html 感謝博主Agoly這篇文章說的很詳細很透徹。 MySQL會出現中文亂碼的原因不外乎下列幾點&#xff1a;1.server本身設定問題&#xff0c;例如還停留在latin1 2.table的語系設定問題(包含charact…

Teams Bot如何判斷用戶所在的時區

一說到時間&#xff0c;就會聯想到時區&#xff0c;夏令時等頭痛的問題&#xff0c;不同國家有不同國家的規定。如果你希望你的Teams Bot可以判斷出當前用戶所在的時區&#xff0c;從而可以針對性的進行一些處理時&#xff0c;你要做好心理準備&#xff0c;這個復雜程度遠遠超過…

『流暢的Python』第1~4章筆記_數據結構、編碼

由于1~4章內容零散且基礎&#xff0c;所以統計一下涉及到的內容&#xff0c;記錄一下&#xff0c;方便查閱&#xff08;第一張圖右鍵新頁面打開即可看到清晰大圖&#xff09;

docker 安裝ELK

參考文檔&#xff1a; Docker ELK使用文檔&#xff1a;http://elk-docker.readthedocs.io/ 1.拉取鏡像 查看 Docker Hub 的鏡像 docker search elk 拉取鏡像 sudo docker pull sebp/elk 2.啟動容器 docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 4560:4560 -it --na…

在Teams Hackathon上介紹LuckyDraw

很榮幸有機會在今天的Teams Hackathon上介紹LuckyDraw這個teams app。 因為到場的都是各路開發高手&#xff0c;所以當時在準備這個ppt的時候特別增加了難度等級&#xff0c;哈哈。 從如何構建云原生的Teams app&#xff0c;到IaC&#xff0c;重點講了如何開發一個面向全球用戶…

Word 2010 制作文檔結構之圖標自動編號設置

注意&#xff1a; 使用圖片自動編號時&#xff0c;如果文檔標題使用的樣式是通過“將所選內容保存為新快速樣式”所生成的樣式&#xff0c;則圖片自動編號不會生效 因此設置標題樣式時&#xff0c;不要 新建樣式&#xff0c;直接使用word預設的“標題 1”樣式和“標題 2”樣式即…

ubuntu linux下建立stm32開發環境: 程序燒錄 openocd+openjtag

原文出處&#xff1a; http://blog.csdn.net/embbnux/article/details/17619621 之前建立stm32開發環境,程序也已經編譯好生成main.bin,接下來就是要把該文件燒錄到stm32上.在linux下給arm燒錄程序主要使用openocd,這個軟件開源,而且支持眾多芯片,從ARM9到A8都可以,當然STM32也…

在Teams中對網站的URL特殊解析

Teams中有一個不太被大家注意的擴展點&#xff0c;名字叫Link unfurling&#xff0c;就是對于一些特殊域名的URL進行特別的解釋。 可能這么說&#xff0c;大家還是無法理解&#xff0c;我們看一下下面這個圖&#xff0c;當用戶在message輸入框中輸入了一竄url后&#xff0c;Te…

Wireshark 在Windows下的安裝

1、wireshark官網地址&#xff1a;https&#xff1a;//www.wireshark.ort/ 下載抓包驅動&#xff1a;windows使用winpcap&#xff0c;Linux使用libcap2、安裝下載好的wireshark程序包&#xff1a;3、安裝winpcap插件&#xff1a;4、安裝USBPcap插件&#xff1a;5、安裝完成&…

Teams團隊的成員列表API的已知問題

如果大家經常使用Graph API來對Teams進行操作管理的話&#xff0c;有時候會遇到一些奇怪的問題&#xff0c;我前兩天還在Stack Overflow上回答了一個用戶的問題&#xff0c;這個問題我自己也遇到過。所以我想用這篇文章來分享一下&#xff0c;萬一以后大家遇到類似的問題&#…