60.Django02

Posted heirenxilou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了60.Django02相关的知识,希望对你有一定的参考价值。

一、静态文件配置

1.静态文件

在django中,我们将网站所使用的静态文件默认都放在static文件夹下,静态文件就是前段写好的,我们能够直接调用和使用的文件,如网站写好的js文件,css文件,图片文件以及第三方前端框架。

Django默认是不会自动帮你创建static文件夹 需要你自己手动创建,一般情况下我们在static文件夹内还会做进一步的划分处理,如

-static
    --js
    --css
    --img
    其他第三方文件 

2.静态文件配置

我们在昨天的基础上做了一个网页,然后也写好了css文件和js文件放在了我们的static文件夹下,但是我们在浏览器中输入URL后,结果展示给我们的却只有一个光秃秃的未加css,js修饰的纯html界面,再一看检查会发现放在static文件夹下的css和js文件发生报错403,这就说明后端没有开设该资源的接口,就是因为我们没有配置静态文件,所以我们要配置静态文件。

找到settings文件,拉到最下面会看到

STATIC_URL = ‘/static/

这里的STATIC_URL = ‘xxx‘就是访问静态文件的令牌

我们把要加载的js文件给他配置上

/static/bootstrap-3.3.7-dist/js/bootstrap.min.js

我们再在下面拼接一下静态文件的路径

# 静态文件配置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,static),
    os.path.join(BASE_DIR,static1),
    os.path.join(BASE_DIR,static2),
]

但是我们要想改一下 STATIC_URL = ‘xxx‘怎么办

我们手改每个地方的路径行不行,不是不行,太傻太慢了

我们可以动态地解释静态文件

    {% load static %}
    <link rel="stylesheet" href="{% static ‘bootstrap-3.3.7-dist/css/bootstrap.min.css‘ %}">
    <script src="{% static ‘bootstrap-3.3.7-dist/js/bootstrap.min.js‘ %}"></script>
    

然后我们随便改static都可以了。

现阶段小tips:

我现在使用django提交post请求的使用,经常会报错,此时对于处于刚学习django阶段的我们还没有,还没有解决这个问题的能力,只需要记住找到配置文件里的中间件,把其中一行注释掉就行了

MIDDLEWARE = [
    django.middleware.security.SecurityMiddleware,
    django.contrib.sessions.middleware.SessionMiddleware,
    django.middleware.common.CommonMiddleware,
    # ‘django.middleware.csrf.CsrfViewMiddleware‘,这条注释掉
    django.contrib.auth.middleware.AuthenticationMiddleware,
    django.contrib.messages.middleware.MessageMiddleware,
    django.middleware.clickjacking.XFrameOptionsMiddleware,
]

这样就能暂时解决报错问题,在后面对django地深入学习后会回头来解决这个问题的  

二、request对象

request.method

返回请求方式 并且是全大写的字符串形式

request.POST

获取用户post请求提交的普通数据不包含文件

print(request.POST)  
<QueryDict: {username: [xilou], password: [123]}>

request.POST.get:只获取列表最后一个元素

username = request.POST.get(username)
print(username,type(username))  
hobby = request.POST.get(hobby)
print(hobby,type(hobby))  
# xilou <class ‘str‘>
# 333 <class ‘str‘>

request.POST.getlist:直接将列表取出

username = request.POST.getlist(username)
print(username,type(username))
hobby = request.POST.getlist(hobby)
print(hobby, type(hobby))
"""
[‘xilou‘] <class ‘list‘>
[‘111‘, ‘222‘, ‘333‘] <class ‘list‘>
"""

request.GET:

request.GET.get

request.GET.getlist

和POST用法一样,不做赘述,

这里就说一下get和post请求的小区别:

get请求携带的数据是有大小限制的 大概好像只有4KB左右
post请求则没有限制

三、pycharm链接数据库

这里数据库就用mysql来演示

在右上方或者左下方找到database按钮,如果没有就去左下角点这个按钮

技术图片

 

 

 找到database,

实在没有就重装pycharm吧

 

如果是第一次使用那得先装插件,按download然后就会自动下载了

 

下载完以后点test connection,输入你的mysql账号密码然后再登录就能进去了

 

技术图片

 

 

 

四、Django连接数据库

因为Django默认使用的是sqlite3,我们要改成mysql

第一步先找到settings文件中的DATABASE 

然后改成

DATABASES = {
    default: {
        ENGINE: django.db.backends.mysql,
        NAME: mydjango,
        USER:root,
        PASSWORD:你的密码,
        HOST:127.0.0.1,
        PORT:3306,
        CHARSET:utf8
    }
}

这样弄完虽然完成了,但是还不够,我们一运行就会发现问题了

他会报错说:No module named ‘pymysql‘

由于django默认用的是mysqldb模块链接MySQL

但是该模块的兼容性不好 需要手动改为用pymysql链接

我们要在项目名下的__init__.py或者任意app下的__init__.py中写下以下代码

import pymysql
pymysql.install_as_MySQLdb()

五、Django ORM

ORM:对象关系映射
作用:能够让一个不用sql语句的小白也能够通过python 面向对象的代码简单快捷的操作数据库
不足之处:封装程度太高 有时候sql语句的效率偏低 需要你自己写SQL语句

1.先去models.py中书写一个类

class User(models.Model):
    # id int primary_key auto_increment
    id = models.AutoField(primary_key=True)
    # username varchar(32)
    username = models.CharField(max_length=32)
    # password int
    password = models.IntegerField()

2.数据库迁移命令

只要你修改了models.py中跟数据库相关的代码 就必须重新执行下面的两条命令

python3 manage.py makemigrations 将操作记录记录到小本本上(migrations文件夹)

python3 manage.py migrate  将操作真正的同步到数据库中

3.对数据库操作的代码对比sql语句

class User(models.Model):
    # id int primary_key auto_increment
    id = models.AutoField(primary_key=True,verbose_name=主键)
    # username varchar(32)
    username = models.CharField(max_length=32,verbose_name=用户名)
    """
    CharField必须要指定max_length参数 不指定会直接报错
    verbose_name该参数是所有字段都有的 就是用来对字段的解释
    """
    # password int
    password = models.IntegerField(verbose_name=密码)


class Author(models.Model):
    # 由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段
    # 所以orm当你不定义主键字段的时候 orm会自动帮你创建一个名为id主键字段
    # 也就意味着 后续我们在创建模型表的时候如果主键字段名没有额外的叫法 那么主键字段可以省略不写
    # username varchar(32)
    username = models.CharField(max_length=32)
    # password int
    password = models.IntegerField()

六、ORM中对数据库操作的增删改查

1.字段的增删改查

字段的增加

1.可以在终端内直接给出默认值
2.该字段可以为空
    info = models.CharField(max_length=32,verbose_name=个人简介,null=True)
3.直接给字段设置默认值
    hobby = models.CharField(max_length=32,verbose_name=兴趣爱好,default=study)

字段的修改

直接修改代码然后执行数据库迁移的两条命令即可!

字段的删

直接注释对应的字段然后执行数据库迁移的两条命令即可!
执行完毕之后字段对应的数据也都没有了

2.数据的增删改查

数据的查询

user_obj = models.User.objects.filter(username=username).first()

返回值你先看成是列表套数据对象的格式
它也支持索引取值 切片操作 但是不支持负数索引
它也不推荐你使用索引的方式取值

数据的增加

第一种:

from app01 import models
res = models.User.objects.create(username=username,password=password)

第二种

user_obj = models.User(username=username,password=password)
user_obj.save()  # 保存数据

以上是关于60.Django02的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段02

Python之路60-Django 视图

60 django- cookie和session 以及中间件

60Django 第二天功能

60Django 第二天功能

60 Django项目 单表(出版社)的增删改查