1. 程式人生 > >二、1:靜態檔案配置,並配置簡易版登入功能。

二、1:靜態檔案配置,並配置簡易版登入功能。

1 django中app的概念:

大學:----------------- 專案

資訊學院 ----------app01

物理學院-----------app02

****強調***:建立了app,要在配置檔案中註冊

...

2 模板路徑配置:

1 templates資料夾 (這裡面放自已寫的靜態檔案程式碼)

2 settings裡註冊一下

3 靜態檔案配置與資料庫配置:

   1 靜態檔案配置:

settings.py

# 'django.middleware.csrf.CsrfViewMiddleware',     # 大約在47行註釋掉
STATIC_URL = '/static/'  # 預設已有的
# 建立一個static資料夾
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    # 建立的資料夾路徑(可以寫多個)
]

   2 資料庫配置:

在app下的__init__.py裡寫:
import pymysql
pymysql.install_as_MySQLdb()

  3 如果連線mysql:在setting裡配置:(記得提前建立資料庫)

'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'password',
'NAME': 'dbname',
			}

   4 orm建立表 (會建立app01_user的表中,欄位為:id,name,pwd)

django-orm:

1 不能建立資料庫(需要手動建立資料庫)

2 可以建立資料表

3 可以建立欄位

models.py

class User(models.Model):
    id=models.AutoField(primary_key=True)   #  primary_key=True 是為主鍵,AutoField:自增
    name=models.CharField(max_length=32)    #  CharField:字串型別,max_length=32 字串最大長度為32
    pwd=models.CharField(max_length=32)

   5  資料庫遷移

1 python3 manage.py makemigrations   ----記錄一下資料庫的變化

2 python3 manage.py migrate          ----將變化同步到資料庫中

4 完整版登入功能

小知識

get:獲取資料,頁面,攜帶資料是不重要的資料(資料量有大小限制)
post:往後臺提交資料	

1 login.html  

***重點***1 action:提交到後臺的地址三種寫法:


1 http://127.0.0.1:8000/login-

2 /login/   推薦用!!!!!!!!

3 空

2 method  post方式

<input type="submit" value="提交">或<button></button> type不可以是button
				
<form action="http://127.0.0.1:8000/login" method="post">
<p>使用者名稱:<input type="text" name="name" class="form-control"></p>
<p >密碼:<input type="password" name="pwd" class="form-control"></p>
<input type="submit" value="提交">
</form>

3 檢視層:(views.py 如果選了以下方式,上面settings.py中設定的資料庫就沒用了。)

1 request.method  ----前臺提交過來請求的方式

2 request.POST(相當於字典)----post形式提交過來的資料,(http請求報文的請求體重)

3 request.POST.get('name') ----推薦用get取值(取出列表最後一個值)

4 request.POST.getlist('name')-----取出列表所有的值_

5 前臺get方式提交的資料,從request.GET字典裡取

2 連結資料庫(防止注入,推薦以下寫法)

cur.execute('select * from user where name=%s and password=%s ',[name,pwd])

from django.shortcuts import render,HttpResponse
import pymysql
def login(request):
    if request.method=='GET':
        return render(request,'login.html')
    elif request.method=='POST':
        name=request.POST.get('name')
        pwd=request.POST.get('pwd')
        # 使用mysql 連線 <
        conn=pymysql.connect(host='127.0.0.1',port=3306,db='db1',user='root',password='mariadb.123')
        cur=conn.cursor()
        # sql防注入
        cur.execute('select * from user where name=%s and password=%s ',[name,pwd])
        user=cur.fetchone()  # 從資料庫中的user 表裡,只取一條資料,返回元祖型別
        if user:
            return HttpResponse('successful')
        else:
            return HttpResponse('fail')

3、render、redirect、HttpResponse作用

1 render--返回頁面,預設會去templates裡找,注意路徑

2 redirect--重定向

3 HttpResponse -- 本質:都是返回HttpResponse的

5  ORM介紹

1 ORM即Object Relational Mapping,全稱物件關係對映。

優點: 

1 不用寫sql,不會sql的人也可以寫程式

2 開發效率高

2 缺點:

1 可能sql的效率低

3 如何使用:

如果連線mysql:在setting.py裡配置:

    'default': {

'ENGINE': 'django.db.backends.mysql',

'HOST': '127.0.0.1',

'PORT': 3306,

'USER': 'root',

'PASSWORD': 'password',

'NAME': 'dbname',

}

在app下的__init__.py裡寫:

import pymysql

pymysql.install_as_MySQLdb()