zoukankan      html  css  js  c++  java
  • 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()  # 保存数据
  • 相关阅读:
    0705. Design HashSet (E)
    VMware简单使用
    Git笔记
    初识MyBatis
    数据库连接池配置 testOnBorrow
    Redis list操作命令
    文件/目录对比:diff命令
    可用于区块链的共识算法
    分布式一致性算法,你确定不了解一下?
    Jmeter文件下载测试
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12961320.html
Copyright © 2011-2022 走看看