django 静态文件的配置 orm 中 字段与数据的增删改查 使用MySQL数据库

模板语法:(只有一下两种情况)
1:{{ obj}}                         变量相关
2:{% for i in list %}              逻辑相关
   {% endfor %}

今日内容:

创建路由:新创建的路由必须去settings注册
    创建:python.manage.py startapp app02
    注册:1.app  (支持简写)
         2.app02.apps.App01Config(全称)
启动django项目的时候,确保一个端口只有一个django项目在占用,不然容易造成bug
用户能够访问的资源都在url中,只有url中开设的相关资源,你才能访问到(*****)

html文件默认全都放在templates文件夹下
静态文件:前端框架,图片,css,js...默认放在static文件夹下下
static文件夹中默认创建的子文件夹
    css文件夹: 当前网站所有的样式文件
    js文件夹:  当前网站所有的js文件
    img文件夹: 当前网站所有的图片文件
静态文件的配置:
    1.STATICFILES_FIRS = [
            os.path.join(BASE_DIR,'static')
    2.STATICFILES_FIRS =(
             os.path.join(BASE_DIR,'static'),
             )
    注:1.都端资源都需要手动暴露给用户,这样你只要输入static文件夹内具体文件的路径,就能访问到
       2.STATIC_URL = '/static'static 只是接口前缀,而不是文件夹的名字
       3.静态文间动态解析,动态的获取接口浅醉
            {% 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>

重点:*****
python manage.py makemigrations:默认给所有APP生成迁移脚本(数据迁移记录)
python manage.py migrate:
    migrate做了什么:
        1.将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句。
        2.如果这个SQL语句执行没有问题,那么就会将这个迁移脚本的名字记录到django_migrations中。
    migrate怎么判断哪些迁移脚本需要执行:
        1.将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。
这两中命令调用默认为全局,即对所有最新更改的model或迁移文件进行操作。如果想对部分app进行操作,就要在其后追加app name:


form表单默认是ge(url+数据)请求方式,可通过method修改为post
    注: 改为post后,需要在settings中注掉一个中间建 csrf,
        用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错.
        # 'django.middleware.csrf.CsrfViewMiddleware',
    eg: http://127.0.0.1:8000/login/?username=lina&password=123

视图函数的处理方式:
方式一:
if request.method == 'GET':
    print(request.method)  # 能够获取前端请求方式 并且是全大写的字符串
    return render(request,'login.html')
elif request.method == 'POST':
    return HttpResponse("拿到了 老弟")
方式二:
if request.method == 'POST':
    return HttpResponse('来啦 宝贝')
return render(request,'login.html')
      注:视图函数中 一般会先处理get请求

获取前端数据:
    request.method获取请求方式
    GET:
        request.GET获取前端get提交的数据(类似一个大字典)
        取值:value是列表
            方式一: request.GET.get('xxx')
                    request.GET.getlist('xxx')
            方式二: request.GET['XXX']
        注: 1.get默认取列表中的最后一个数据
            2.getlist会把列表中的数据全取出来
            3.强烈不建议使用第二种方式,列表中无数据会报错
    POST
        request.POST获取前端post提交的数据(就类似于是一个大字典)
        取值
            request.POST.get('username')  # 虽然value是一个列表 但是默认只取列表最后一个元素
            # 强烈不建议你使用中括号的形式取值
            # 如果想直接把列表全部取出(******)
            request.POST.getlist('hobby')

数据库的配置:
因为django默认使用的是sqlite数据库,所以要用其他数据库话要做到以下两步;
1.修改settings
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'fei',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'USER':'root',
            'PASSWORD':'678666',
            'CHARSET':'utf8'

        }
    }
2.在项目名/应用名 下的__init__文件中让其使用pymysql连接数据库,而不是用mysqldb
    import pymysql
        pymysql.install_as_MySQLdb()
注: settings中k,v键值对中k要大写


django orm: 对象关系映射
类---------->表
对象-------->一条记录
对象.属性--->字段对应的值
模型类:
 class M(models.Model):
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=255)
    password = models.IntegerField()
注:1.在django中的orm中可以不写主键字段,django会帮你创建
   2.自己创建了,django不会再帮你创建
   3.charfield中必须指定max_length参数
   4.models中数据有变动后,需要执行 python manage.py makemigrations 与 python manage.py migrate,两者缺一不可

表字段的增删改查:
    增:
        1.给新增字段设置默认值
        addr = models.CharField(max_length=32,default='China')
        2.给新增字段设置为空
        age = models.IntegerField(null=True)  # 该字段允许为空

     删:在models中注释掉 该字段  然后执行更新命令
        注:1.执行完后该字段对应的所有数据全部删除
           2.不会用到真正意义上的删除(*******)慎用


对数据的增删改查:
     查:
        先到models模块 from app01 import models
        查的方式:
            1.models.User.objects.all()
            2.models.User.objects.get(xxx=xxx)
            3.models.User.objects.filter(xxx=xxx)
            4.models.User.objects.filter(xxx=xxx).fist()
          注: 1.get方法 拿到数据对象本身,当查询条件不存在 会直接报错  不推荐用
              2.filter方法 得到一个列表,列表内是数据对象本身,当查询条件不存在 不会会报错,会返回一个空列表;
                filter中支持多个参数,参数间是and关系
              3.all方法 查全部数据 得到一个queryset对象 可以直接点query查看年内部对应的sql语句
                queryset对象  可以当成一个列表来操作,支持索引(只支持正数索引不支持负的),支持切片(切出来的是新的queryset对象)
              4.filter().fist  拿到列表中第一个数据对象   推荐用这个
              重点:
                    用索引取值,当列表中没数据时会报错;
                    用first取值 虽然内部也是按照索引取值  但是没有数据 也不会报错 返回的是None  内部机制对其进行了优化


     增:
        方法1.models.User.objects.create(username=username,password=password)
            2.user_obj = models.User(username=username,password=password)
              user_obj.save()
     删:(从前端获取要删除数据的id,根据id删除)
        models.User.objects.filter(条件).delete()

     改:(查出要修改的数据,渲染到页面让用户修改,然后在传到后端进行修改)
       1. models.User.objects.filter(条件).update()
       2.edit_obj.username = username
         edit_obj.password = password
         edit_obj.save()

       注: 1.filter 拿到是一个列表 ,他属于批量操作,会一次性全部修改类似for循环
           2.会从头到尾将所有字段全部修改一遍,效率极低.

猜你喜欢

转载自www.cnblogs.com/wyf20190411-/p/11531087.html