我自己的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("訪問爲空")