溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

二、1:靜態(tài)文件配置,并配置簡易版登錄功能。

發(fā)布時間:2020-06-18 01:22:44 來源:網(wǎng)絡(luò) 閱讀:370 作者:a120518129 欄目:編程語言

1 django中app的概念:

大學(xué):----------------- 項(xiàng)目

信息學(xué)院 ----------app01

物理學(xué)院-----------app02

****強(qiáng)調(diào)***:創(chuàng)建了app,要在配置文件中注冊

...

2 模板路徑配置:

1 templates文件夾 (這里面放自已寫的靜態(tài)文件代碼)

2 settings里注冊一下

3 靜態(tài)文件配置:

   1 靜態(tài)文件配置:

settings.py

# 'django.middleware.csrf.CsrfViewMiddleware',     # 大約在47行注釋掉
STATIC_URL = '/static/'  # 默認(rèn)已有的
# 創(chuàng)建一個static文件夾
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    # 創(chuàng)建的文件夾路徑(可以寫多個)
]

  

4 完整版登錄功能

小知識

get:獲取數(shù)據(jù),頁面,攜帶數(shù)據(jù)是不重要的數(shù)據(jù)(數(shù)據(jù)量有大小限制)
post:往后臺提交數(shù)據(jù)	

1 login.html  

***重點(diǎn)***1 action:提交到后臺的地址三種寫法:


1 http://127.0.0.1:8000/login-

2 /login/   推薦用?。。。。。。?!

3 空

 method  post方式 (templates目錄下靜態(tài)代碼文件名:login.html,寫在body標(biāo)簽里面

注意:<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>

2 建立與配置數(shù)據(jù)庫

提前建立一個名為db1的數(shù)據(jù)庫

在應(yīng)用名目錄下的models.py文件中:


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)


數(shù)據(jù)庫遷移

1 python3 manage.py makemigrations   ----記錄一下數(shù)據(jù)庫的變化

2 python3 manage.py migrate          ----將變化同步到數(shù)據(jù)庫中

字段中寫入數(shù)據(jù),將來測試。


3 視圖層:(views.py 如果在視圖層已配置了連接數(shù)據(jù)庫后,就不要在settings.py中設(shè)置的數(shù)據(jù)庫了。)

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

2 request.POST(相當(dāng)于字典)----post形式提交過來的數(shù)據(jù),(http請求報(bào)文的請求體重)

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

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

5 前臺get方式提交的數(shù)據(jù),從request.GET字典里取

2 鏈接數(shù)據(jù)庫(防止注入,推薦以下寫法)

 1:先在urls.py(總路由,請求地址跟視圖函數(shù)的映射關(guān)系)里面增加一條路由

 url(r'^login/', views.login),

  2:在視圖函數(shù)中寫入

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()  # 從數(shù)據(jù)庫中的user 表里,只取一條數(shù)據(jù),返回元祖類型
        if user:
            return HttpResponse('successful')
        else:
            return HttpResponse('fail')

3、render、redirect、HttpResponse作用

1 render--返回頁面,默認(rèn)會去templates里找,注意路徑

2 redirect--重定向

3 HttpResponse -- 本質(zhì):都是返回HttpResponse的


最后訪問:http://127.0.0.1:8000/login/ 測試。


5  ORM介紹與數(shù)據(jù)庫配置(與上面views.py文件中的連接數(shù)據(jù)庫不可重復(fù)配置,以后我們都會這種方式去學(xué)習(xí),寫在views.py鏈接數(shù)據(jù)庫中的方式僅作了解)

1 ORM即Object Relational Mapping,全稱對象關(guān)系映射。

優(yōu)點(diǎn): 

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

2 開發(fā)效率高

2 缺點(diǎn):

1 可能sql的效率低

3 如何使用:

如果連接mysql:在setting.py里配置:(記得提前建立數(shù)據(jù)庫)

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

 2 數(shù)據(jù)庫配置:

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

 3 orm創(chuàng)建表 (會創(chuàng)建app01_user的表中,字段為:id,name,pwd)

django-orm:

1 不能創(chuàng)建數(shù)據(jù)庫(需要手動創(chuàng)建數(shù)據(jù)庫)

2 可以創(chuàng)建數(shù)據(jù)表

3 可以創(chuàng)建字段

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  數(shù)據(jù)庫遷移

1 python3 manage.py makemigrations   ----記錄一下數(shù)據(jù)庫的變化

2 python3 manage.py migrate          ----將變化同步到數(shù)據(jù)庫中





向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI