1. 程式人生 > 實用技巧 >django框架之請求生命週期及ORM引入等相關內容-61

django框架之請求生命週期及ORM引入等相關內容-61

1 登入功能,連線mysql

路由

  url(r'^login', views2.login),
url(r'^index', views2.index),
url(r'^test', views.test),

檢視函式

def index(request):
return render(request, 'index2.html')


def login(request):
if request.method == 'GET':
return render(request, 'login.html')
else:
name = request.POST.get('name')
password = request.POST.get('password')
# 建立一個數據庫連結
conn = pymysql.connect(host='127.0.0.1', user='root', password='123', database='userinfo', port=3306, )
# 拿到一個遊標
cursor = conn.cursor()
# 執行sql
cursor.execute('select * from user where name=%s and password=%s ', (name, password))
# 獲取結果
ret = cursor.fetchone()
print(ret)
if ret:
return redirect('/index')
else:
return HttpResponse('使用者名稱或密碼錯誤')

模板檔案login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
<title>Title</title>
</head>
<body>

<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">登入功能</h1>
<form action="" method="post">
<div class="form-group">
<label for="">使用者名稱:</label>
<input type="text" name="name" class="form-control">
</div>


<div class="form-group">
<label for="">密碼:</label>
<input type="password" name="password" class="form-control">
</div>

<div class="text-center">

<input type="submit" value="登入" class="btn btn-success">
</div>

</form>
</div>

</div>

</body>
</html>

模板檔案index2.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
<script src="/static/js/jquery.min.js"></script>
<title>首頁</title>
</head>
<body>

<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">導航</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<form class="navbar-form navbar-right">
<div class="form-group">
<input type="text" placeholder="Email" class="form-control">
</div>
<div class="form-group">
<input type="password" placeholder="Password" class="form-control">
</div>
<button type="submit" class="btn btn-success">Sign in</button>
</form>
</div><!--/.navbar-collapse -->
</div>
</nav>

<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
<div class="container">
<h1>劉清政</h1>
<p>同城交友</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">瘋狂點選我</a></p>
</div>
</div>

<div class="container">
<!-- Example row of columns -->
<div class="row">
<div class="col-md-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<div class="col-md-4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<div class="col-md-4">
<h2>Heading</h2>
<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
</div>

<hr>

<footer>
<p>© 2016 Company, Inc.</p>
</footer>
</div> <!-- /container -->




</body>
</html>

2 MTV與MVC

1 django 是MTV架構,本質也是mvc
-M:model,資料庫相關操作
-T:template,模板檔案(就是mvc的v層)
-V:view,檢視(路由+V=MVC的控制器)
2 MVC架構:主流的web框架都是mvc
-Web應用分為模型(M),控制器(C)和檢視(V)
-M:model,資料庫相關操作
-C:controler控制器,邏輯相關,邏輯程式碼
-V:檢視,模板檔案

3 詳情看部落格圖

3 django請求生命週期


0 近幾年python中的幾個web框架,sanic,fastapi(非同步框架)

1 python中的web伺服器都符合wsgi協議

2 web伺服器,任何語言都會有一個web伺服器,負責把http請求轉成這門語言的變數
-python:wsgiref(效能很低),uwsgi(C語言寫的),200多併發量
-java:tomcat,jboss(300多併發了)
-php:php伺服器

4 虛擬環境講解,pycharm配置

1 虛擬環境作用:隔離專案,每個專案有自己依賴的模組和包,不同模組和包的版本就不會相互影響
2 pycharm中配置虛擬環境

5 orm概述

1 orm:物件關係對映(跟語言無關)
資料庫中的表 ----》對應程式的一個類
資料庫中的一行資料----》對應程式中的一個物件
2 python中常見orm框架
-django的orm框架
-sqlachemy orm框架

3 java:(擴充套件),java中寫web專案
ssh框架 :spring+struts(有漏洞)+hibernate(orm框架) (我的那個年代)
ssm框架:spring+springmvc+mybatis(orm框架,可以寫原生sql)
springboot:sb框架 ,tomcat內建進去了
springcloud:微服務
4 orm能幹的事
-建立表(不能建立資料庫,手動建立資料庫)
-增加刪除表內欄位
-增刪查改資料

6 pycharm連線sqlite/mysql

7 django中orm的使用


0 sqlite:也是要給資料庫,檔案資料庫,一個庫就是要給檔案,不需要單獨安裝
-咱們現在在用,也要用到關係型資料庫,不想裝mysql,就可以使用sqlite
-移動開發本地儲存資料,存在sqlite中

1 建立個UserInfo表,在models中寫一個類
2 表中有欄位(類屬性),欄位有屬性,


# 第一步在models中寫要給類
class UserInfo(models.Model):
# 欄位屬性--》後面那個物件決定的,
# 改欄位自增,並且是主鍵
id = models.AutoField(primary_key=True)
# 改欄位是varchar型別,長度為32(唯一約束,是否是索引,預設值是,是否可以為空)
name = models.CharField(max_length=32)
# 密碼欄位
password =models.CharField(max_length=64)
# 第二步,把表創建出來(執行兩個命令)
-python3 manage.py makemigrations # 這條命令會在migrations建立一條記錄,資料庫變更記錄
-python3 manage.py migrate # 把更改同步到資料庫