Django基礎

我自己的Django版本是2.1,pyhton是3.7,數據庫是mysql5.6

搭建一個Django web框架,知道Django中models,views,urls的作用基本就差不多完成了。先大致說一下Django的運行流程。當我們運行Django是,在沒有錯誤的情況下,我們在瀏覽器中輸入 http://127.0.0.1:8000/就可以訪問到我們的網頁了。在輸入網站訪問的時候,Django首先是在urls中尋找我們的路由地址,urls一般如下

urlpatterns = [
    path('remind/',views.remind,name='remind'),
    path('noticeUser/',views.noticeUser,name='noticeUser'),

    #用戶
    path('',views.index,name='index'),
    path('slogin/',views.slogin,name='slogin'),
    path('slogout/',views.slogout,name='slogout'),
    path('register/',views.register,name='register'),
    path('user_center/',views.user_center,name='user_center'),
    path('user_center/edit_pro/',views.edit_pro,name='edit_pro'),
    path('user_center/change_pass/',views.change_pass,name='user_change_pass'),
]

就是path這個函數,第一個參數是我們訪問網頁的時候瀏覽器顯示的地址,第二個參數是我們通過這個url對應找的views中的一個函數,後面一個是我們爲這個路由起的一個名字,可以不寫,也就是說我們通過這個url就可以跳轉到views文件中。
views文件大致如下

def remind(request):
    return render(request,'other/remind.html')

其實就是通過views中的一個函數去渲染一個html,一般通過return render()去進行渲染,需要注意的是這個函數必須有一個參數request,render這個函數的第一個參數也是request,第二個參數就是我們寫的html文件。一般這個html文件放在 templates這個文件下,如果沒有的自行創建一個就好。

以上就是Django的一般流程 ,下面說一下一些我自己覺得需要注意的東西

我是用pycharm寫的程序,在pycharm中點擊新建一個項目的時候選擇django,填寫好路徑就可以了。之後需要新建一個app,在pycharm中打開命令行,輸入 python manage.py startapp appname
就可新建一個名爲appname的app。

settings配置文件

關於這個文件,說一下幾點

1 註冊app

當我們新建一個app之後,需要在settings中註冊app。
在settings找到

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myauth.apps.MyauthConfig',
]

在這段代碼的後面加上你新建的app名字即可。

2 更改語言

當我們打開網頁的時候,如果現實的是英文,可以通過配置文件把語言改爲或者中文

LANGUAGE_CODE = 'zh-hans'
3 更改時區

默認的時區應該是格林蘭治時區,下面的是修改爲中國的時區

TIME_ZONE = 'Asia/Shanghai'
4 配置靜態文件

在我們寫html的時候,我們是把圖片,css,js等這些靜態資源文件放在static下面,因此需要我們做一些配置才能使用,在settings的配置如下:

STATIC_URL = '/static/'

在html的開頭加上下面這句

{% load static %}
5 配置數據庫

默認配置的是sqlite3,我使用的是mysql,配置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'NAME': 'movie',
        'USER': 'root',
        'PASSWORD': '123456pl',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

name是數據可得名稱,password是數據的名稱,其它的對應自己的數據庫進行填寫即可。

數據庫的使用

當我們配置好數據庫設置之後
使用命令

pyhton manage.py makemigrations

生成遷移文件,可以migrations文件下看到生成的遷移文件
再用

python manage.py migate

就可以把這些遷移文件映射到數據庫中,打開數據庫就可以看到Django已經爲我們生成了一些表,我們也不必去關心這些表,其中比較有用的是user表,這張表已經爲我們設置了用戶的一些信息,如果覺得不滿意也可以進行拓展,這裏我不太熟悉,感興趣的可以自行去查看。
當我們需要自定義表的時候在models中定義好再執行上面兩條命令就可以生成了。

class User_evaluation(models.Model):
    user_id=models.FloatField()
    movie_id=models.FloatField()
    score = models.FloatField()
    class Meta:
        unique_together=('user_id','movie_id')

新建的表需要繼承models.Model,字段類型有下面這些:

在這裏插入圖片描述
在這裏插入圖片描述
Django不支持設置多個主鍵,如果想要設置多個主鍵的話,可以參看我們的設置,加上class Meta,把主鍵都放在裏面就可以了。

保存數據到數據庫:

在這裏插入圖片描述

查詢數據

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

字段查找類型

在這裏插入圖片描述
在這裏插入圖片描述

更新數據

在這裏插入圖片描述
在這裏插入圖片描述
其它的一些操作就不說了,如果遇到的話就自行百度吧

前後端的交互

在views中,當我們調用render這個函數的時候,我們可以在最後以鍵值對的姓氏向html文件傳參數

def showMovie(request):
    if request.method == 'POST':
        error = ''
        if request.POST.get('movie_id'):
            movie_id = request.POST['movie_id']
            score = float(request.POST['Score'])
            if score >= 0 and score <= 10 :
                num = User_evaluation.objects.filter(user_id=request.user.id,movie_id=movie_id).count()
                if num:
                    User_evaluation.objects.filter(user_id=request.user.id,movie_id=movie_id).update(score=score)
                else:
                    User_evaluation(user_id=request.user.id, movie_id=movie_id,score=score).save()
            else:
                error = '錯誤'
            info = movie_info.objects.all()
            data = []
            data.append(info[int(movie_id)-1])
        else:
            movie_name = request.POST['movie_name']
            data = movie_info.objects.filter(movie_name=movie_name)
        if data:
            return render(request,'movie/show_movie.html',{'data':data,'error':error})
        else:
            return render(request, 'movie/show_movie.html', {'error':error})
    else:
        return redirect('myauth:index')

所以當我們需要顯示數據庫的內容的時候,就可以先從數據庫獲取數據再傳向前端,也可以自定義自己要傳的信息內容。在前段的使用方法如下:

{% for x in data %}
{% endfor %}

和Html一樣這個也需要成對使用,有開始,也有結束。還有一些可以使用的東西,比如if,我經常使用的就是這兩個了。當然我們在html提交表單的時候,我們也可以在views中收到表單提交的內容,從而把表單提交的內容保存到數據庫中。

以上就是我對Django的一些認識

下面是我覺得實用的一些技巧

1 通過url打開瀏覽器
import sys
import webbrowser
import time
import os
import urllib
def download():
    sys.path.append('libs')
    dataList = movie_info.objects.all()
    count=0
    for i in dataList:
        time.sleep(2)
        webbrowser.open(i.movie_poster,0,False)
        count+=1
        if count==10:
            count=0
            os.system('taskkill /F /IM chrome.exe')

我使用的是谷歌瀏覽器,瀏覽器不同os.sysytem裏的參數不同,每打開一個網頁就睡眠兩秒鐘,這是爲了充分加載完這個網頁的內容,當然你也可以根據自己的條件設置睡眠的時間。此外我是每打開10個網頁就關閉一次瀏覽器,避免電腦資源不足。

根據url下載圖片
 try:
            request = urllib.request.Request(i.movie_poster)
            response = urllib.request.urlopen(request)
            img = response.read()
            # print(img)
            with open("D:/pycharm_code/Movie_recommd/myauth/static/img/movie_info/" + str(i.id) + ".jpg", "wb") as f:
                f.write(img)
            print("D:/jpg/" + str(i.id) + ".jpg" + "已經寫入本地磁盤")
        except:
            print("訪問爲空")
發佈了70 篇原創文章 · 獲贊 6 · 訪問量 7425
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章