zoukankan      html  css  js  c++  java
  • Django 之day02,必会知识点

    静态文件配置*******
    为什么用户在浏览器中输入的网址能够访问到对应的资源,
    前提是后端提前开设该资源的访问,在urls.py文件中进行配置该路由,
    如果我的后端没有开设相关的资源,用户是无法访问到的。

    1.默认情况下所有的html文件都是放在templates文件夹内
    
    2.什么是静态文件
    网站所使用到的提前写好的css  js  第三方模块 图片都叫做静态资源
    
    3.默认情况下网站所用到的静态文件资源全部放在static文件夹下。
    通常情况下,在static文件夹内部还会再建其他文件夹
        css 文件夹
        js  文件夹
        font    文件夹
        img     文件夹
        为了更加方便的管理文件
    django中,需要手动创建static文件夹
    
    
    
    
    
    4.静态文件动态绑定----重点!!!
    {%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>
    
    5.   #访问静态资源文件接口前缀,通常情况下接口前缀的名字是static
    STATIC_URL = '/xxx/'
    #例如通过 http://127.0.0.1:8000/xxx/a.txt查找a.txt文件
    #手动配置静态文件访问资源
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static')
        os.path.join(BASE_DIR,'static1')
        os.path.join(BASE_DIR,'static2')
     #多个配置文件,查找顺序,自上向下依次查找,找到就结束
    
    ]
    
    6.
    form表单默认是get请求
        get请求也能够携带参数
            http://127.0.0.1:8000/login/?username=jjjjksk & password=123
            特点:url?xxx=xxxx & yyyy=yyyy
            1.携带的数据不够安全
            2.携带的数据大小有限制 ,最大好像应该差不多是4kb左右
            3.通常只会携带一些不是很重要的数据
    
    
    7.post请求会出现403,需要注释settings中下面的中间件
    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',
    

    ]

    8.
     <form action="" method="">默认处理的是get请求,
     get请求指向拿到login页面
     post请求向后端提交数据,然后后端做校验
    
     9.如何判断当前请求方式???
     request.method获取请求的方式
     拿到的是字符串大写的请求方式 GET  POST
         print(request.method,type(request.method))
         打印:GET <class 'str'>
    
     def login(request):
    
        # print('来了,小老弟')
        # print(request.method,type(request.method))
    
        if request.method=='post':
            print(request.method)
            return HttpResponse('昂首挺胸')
    
        print(request.method)
        return render(request,'login.html')
    
    '''
    视图函数都必须有返回值,
    并且返回值都是HttpResponse对象
    
    '''
    
    10.request方法初始
        request.method 获取请求方式,并且纯大写的字符串
    
        print(request.POST)    获取用户提交的post请求数据
        如何获取用户数据*********
        request.POST.get() #默认只会获取列表最后一个元素
        request.POST.getlist()    #如果你想获取列表,用getlist()方法
    
        print(request.GET)    获取用户提交的GET请求数据
        如何获取用户数据*********
        request.GET.get() #默认只会获取列 表最后一个元素
        request.GET.getlist()    #如果你想获取列表,用getlist()方法
    
    11.pycharm连接数据库,如果最右侧没有显示database的话,可以在settings中配置
    settings --> Plugins  --> Database Tools and SQL(推荐右侧的全部勾选上)
    
    12.django连接MySQL***********
            必须要有两步操作
        1.在settings中找到DATABASES,然后把default中的配置修改为对应mysql的信息
          需要注意的是default中的key值都需要是全大写。
    
    原始的    DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.sqlite3',
                'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            }
        }
    
    改后的    DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'day49',
                'USER':'root',
                'PASSWORD':'root',
                'HOST':'127.0.0.1',
                'PORT':3306,
                'CHARSET':'utf8'
    
            }
        }
    
        2.主动告诉django 不要用默认的mysqldb连接,而是用pymysql
            你可以在项目名下的__init__.py中书写
            也可以在应用名下的__init__.py中书写
            书写内容是:
                import pymysql
                pymysql.install_as_MySQLdb()
    
    13.django orm简介
        orm 对象关系映射
        类  ---  表
        对象  --- 数据
        对象.属性  ---  字段对应的值
    
        为什么使用orm?
            能够让不会数据库操作的人也能够简单方便去操作数据库
        orm的缺点:
            封装程度太高,有时候会出现查询效率偏低的问题
            所以工作中:
                简单的用orm
                复杂的追求速度的,需要你手动书写sql语句
    
    14.django中如何操作orm?
        书写模型类
        去应用下的models.py中书写模型类
    
    注意事项:
        之后在写django项目的时候,一个django项目对应一个数据库,
        不要出现多个项目使用同一个数据库的情况*************
    
    15.*****************数据库迁移(同步)命令********************************
        1.python manage.py makemigrations  将数据库的修改,记录到migrations文件中
    
        2.python manage.py migrate     将修改操作真正的同步记录到数据库中
    
        注意事项:
            1.这两条命令是同步进行的,成双成对,缺一不可
            2.只要修改了models里面和数据库相关的代码,你就必须重新执行上面的两条命令
    
        个人建议:
            只要你离开了你的电脑,你就顺手锁屏,锁屏快捷键是  Windows+L  锁屏
    
    *************************************************************************
    
    16.模型表字段的增删改查
    class User(models.Model):
        username = models.CharField(max_length=255)
        password = models.IntegerField()
        email = models.EmailField()
    
        注意事项:
            字段:email = models.EmailField()
        该字段需要设置默认值,或者该字段允许为空,两种方式需要选择一个
        方式1     设置默认值
        email = models.EmailField(default='123@qq.com')
        方式2     设置为空
        email = models.EmailField(null=True)
        注意:email虽然之前设置了默认值 default='123@qq.com' 后面又修改为 null=True,
        但是仍然对之前设置过的email字段没有任何影响的
        phone = models.BigIntegerField(null=True)
        方式3     直接根据他的提示设置默认值
        gender
        '''
        E:Python   jieshiqi11月份练习考试day50>python manage.py makemigrations
    
         1) Provide a one-off default now (will be set on all existing ro
        ws with a null value for this column)
         2) Quit, and let me add a default in models.py
        Select an option: 1     #######此处做出自己的选择,1设置默认值,2退出设置默认值
        Please enter the default value now, as valid Python
        The datetime and django.utils.timezone modules are available, so
        you can do e.g. timezone.now
        Type 'exit' to exit this prompt
        >>> 'male'  #######此处设置默认值,注意要有引号
        Migrations for 'app01':
          app01migrations005_auto_20191123_2054.py
            - Add field gender to user
            - Alter field email on user
    
        E:Python   jieshiqi11月份练习考试day50>python manage.py migrate
    
        ###不要忘记提交数据到数据库
    
        '''
    
        注意事项,字段的删除谨慎使用,因为对应字段都已经有了数据,删除后不可恢复(如同删库跑路)
        删除字段email、phone、gender:
        # email = models.EmailField(default='123@qq.com')
        # phone = models.BigIntegerField(null=True)
        # gender = models.CharField(max_length=64)
            删除字段的方法:
            直接注释对应字段的代码 +python manage.py makemigrations + python manage.py migrate
    
    17.模型表数据的增删改查****************
    查:
            data = models.User.objects.filter(username=username)
            print(data)         #<QuerySet [<User: User object>]>
    
            '''
            filter 返回的结果是一个列表,里面才是真正的数据对象
            filter 括号内可以放多个关键字参数,这多个关键字参数在查询的时候是and的关系不是or的关系
            '''
            user_list=models.User.objects.all() #查询出所有
            print(user_list)    #列表里面有4个对象<QuerySet [<User: User object>, <User: User object>, <User: User object>, <User: User object>]>
            #对象被打印会执行__str__方法
    增:
        user_obj=models.User.objects.create(username=username,password=password)
        print(user_obj,user_obj.username,user_obj.password)
        #create方法会有一个返回值,返回值就是当前被创建的对象本身(如上面的user_obj)
    
    改:
    
        #修改数据库中的数据
            #sql语句:update User set username='jsdnn',password='123' where id=1;
            models.User.objects.filter(id=edit_id).update(username=username,password=password)  #修改完毕
            '''
            上面的更新语句属于批量操作,会将filter查询出来的列表中所有的对象全部更新
            更新之后,重定向到用户列表页面
    
        由于更新重要,所以我拷贝了一份完整的代码,以供查阅
        def edit_user(request):
            '''
            返回编辑页面,编辑页面要含有用户的原来数据,提交后,保存数据到数据库
            问题:
            1.如何获取用户想要编辑的对应ID数据呢?
                利用get请求携带参数的方式,获取用户想要编辑的数据id值
                edit_id=request.GET.get('edit_id')
            2.如何查询出来要编辑的数据
                将用户想要编辑的数据查询出来,展示到编辑页面上,供用户修改
                edit_obj=models.User.objects.filter(id=edit_id)[0]  #支持索引取值,也支持切片操作,但是不支持负数
                edit_obj=models.User.objects.filter(id=edit_id).first()
                上面两行代码是同一个意思,查询出对应id的数据
                return render(request,'edit_user.html',{'edit_obj':edit_obj})
    
            :param request:
            :return:
            '''
            edit_id = request.GET.get('edit_id')
            if request.method == 'POST':
                username=request.POST.get('username')
                password=request.POST.get('password')
                #修改数据库中的数据
                #sql语句:update User set username='jsdnn',password='123' where id=1;
                models.User.objects.filter(id=edit_id).update(username=username,password=password)  #修改完毕
                '''
                上面的更新语句属于批量操作,会将filter查询出来的列表中所有的对象全部更新
                更新之后,重定向到用户列表页面
    
                '''
    
                return redirect('/userlist/')
    
    
            edit_obj = models.User.objects.filter(id=edit_id).first()
            return render(request,'edit_user.html',{'edit_obj':edit_obj})
    
    删:
        #直接删除
        models.User.objects.filter(id=delete_id).delete()
        '''
            批量操作,会将filter查询出来的列表中所有的对象全部删除
    
        '''
    
    
    注意事项:
        password = models.CharField(max_length=64)
    修改字段类型以后,必须下面的password由整形修改为varchar类型,也是需要提交这两句命令的
    python manage.py makemigrations
    python manage.py migrate
    然后数据库中的对应字段类型,才会从整形修改为字符串类型
  • 相关阅读:
    java基础
    php中的$_REQUEST超全局变量
    update 数据表 set 字段1=字段1+id的sql语句
    青蛙跳台阶的相关问题
    Java语言实现石头剪刀布游戏
    Java语言实现palindrome(回文)
    Java语言实现奇怪的比赛
    Java语言实现随意组合
    Java编辑器IDEA的下载与安装
    Vscode下载与汉化
  • 原文地址:https://www.cnblogs.com/ludundun/p/11924229.html
Copyright © 2011-2022 走看看