Django静态文件/增删改查

一、静态文件配置

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  将操作真正的同步到数据库中
复制代码
manage.py@d60 > makemigrations
bash -cl "/Users/chenfeng/PycharmProjects/d60/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_manage.py makemigrations /Users/chenfeng/PycharmProjects/d60"
Tracking file by folder pattern:  migrations
Migrations for 'app_user':
  app_user/migrations/0001_initial.py
    - Create model User

Following files were affected 
 /Users/chenfeng/PycharmProjects/d60/app_user/migrations/0001_initial.py
Process finished with exit code 0
manage.py@d60 > migrate
bash -cl "/Users/chenfeng/PycharmProjects/d60/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm/django_manage.py migrate /Users/chenfeng/PycharmProjects/d60"
Tracking file by folder pattern:  migrations
Operations to perform:
  Apply all migrations: admin, app_user, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying app_user.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

Process finished with exit code 0
复制代码

 

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()  # 保存数据
posted @ 2020-05-25 22:27  清轩挽长风  阅读(471)  评论(0编辑  收藏  举报