我自己的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("访问为空")
xiaonanxinyi
发布了69 篇原创文章 · 获赞 5 · 访问量 6472
私信
关注