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基础
Django基础
Django不支持设置多个主键,如果想要设置多个主键的话,可以参看我们的设置,加上class Meta,把主键都放在里面就可以了。

保存数据到数据库:

Django基础

查询数据

Django基础
Django基础
Django基础

字段查找类型

Django基础
Django基础

更新数据

Django基础
Django基础
其它的一些操作就不说了,如果遇到的话就自行百度吧

前后端的交互

在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("访问为空")
Django基础Django基础 xiaonanxinyi 发布了69 篇原创文章 · 获赞 5 · 访问量 6472 私信 关注
上一篇:filter() 过滤函数


下一篇:如何用纯 CSS 创作一个小球上台阶的动画