zoukankan      html  css  js  c++  java
  • day50 django

    昨日惠顾

    2.借助于第三方模块帮你撸

    wsgiref模块 web服务网关接口

    ​ 帮你封装了socket

    ​ 帮你处理了HTTP数据 直接封账成一个大字典

    ​ 也是flask的启动源码

    django字典的模板 本身能够承受的并发量很低 大概1000左右

    3.基于上面的代码按照功能的不同拆封成不同的文件夹

    ​ urls.py 路由与视图函数对应关系(视图函数可以使函数也可以是类)

    ​ views.py 一推处理业务逻辑的视图函数

    ​ templates 放html文件

    如果想要增加一个功能,只要在两个文件中做改动即可。首先在urls.py中新增一组对应关系

    4.动静态网页

    ​ html页面上的数据是否是写死的还是后端动态获取的

    5.后端获取时间展示到HTML页面 直接利用字符串的替换完成

    6.基于jinja2模板语法,实现后端给HTML页面传值

    ​ 模板语法是在后端生效的,浏览器是无法识别模板语法,所有的数据渲染全部都是在后端事先生成好的 ,晚会将完整的HTML页面

    变量相关 {{}}

    逻辑相关 {%%}

    7.利用jinja2实现前端 后端 数据库三者结合

    8.简易版本的web框架请求流程图

    python三大主流框架

    django:大而全

    flask:小而精

    tornado:异步非阻塞

    django简介:

    注意事项:

    ​ 1.计算机的名称不能有中文

    ​ 2.以后索引项目名称也不要有中文

    ​ 3.python解释器不要使用python3.7 建议使用3.4-3.6

    ​ 4.一个python窗口只能跑一个项目

    版本问题:

    ​ 1.X 2.X 版本之间有一定的区别

    ​ 统一使用1.11.11版本,暂时不要使用虚拟环境

    pip3 install django==1.11.11

    django-admin

    创建项目:django-admin startproject mysite

    mysite的文件夹,里面有一个文件夹(跟项目名同名)加一个manage.py

    启动项目:首先需要切换到项目目录 cd /masite

    ​ python3 manage.py runserver #默认是本机的8000端口

    ​ python3 manage.py runserver 127.0.0.1:8888

    创建app:

    ​ app就是类似于具体功能的划分

    ​ python3 manage.py startapp day01#APP的名字也应该做到见名知意

    命令行创建django项目,默认不会主动创建templates文件夹,并且settings配置文件中也没有该文件夹的路径配置。

    ​ 需要手动配置:DIR:[os.]

    创建app需要注意的事项

    ​ 小白必会三板斧

    HTTPresponse 返回字符串

    render 返回HTML文件并且支持传值

    redirect 重定向 可以写本网站的路径后缀 还可以写其他网站的全路径

    以登录功能为例

    静态文件配置

    1.默认情况下所有的HTML文件都是放在templates文件夹里

    2.什么是静态文件:
    ​ 网站所使用到的提前写好的css js 第三方的前端模块 图片 都叫静态资源

    3.默认情况下网站所用到的静态文件资源都会放在static文件夹下
    通常情况下,在static文件夹内还会创建其他文件夹

    ​ css 文件夹
    ​ js 文件夹
    ​ font 文件夹
    ​ img 文件夹
    ​ bootstrap 文件夹
    ​ fontawesome 文件夹
    为了更加方便的管理文件
    django中需要自己手动创建静态文件存放的文件夹

    STATIC_URL = '/static/' #访问静态文件资源接口前缀  通常情况下接口的前缀名也叫static 如果后缀是static  就拿路径到下面的文件夹下找
    #手动开设静态文件访问资源
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static')# 将static文件里面所有的资源暴露给用户 可以有多个,自上往下查找
    ]
    

    4.静态文件动态绑定

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

    form表单默认是get请求,并且get请求也是能够携带参数的

    http://127.0.0.1:8000/login/?username=jason&password=jason123
    #特点:url?xxx=xxx&yyy=yyy
    1.携带的数据不安全
    2.携带的数据大小有限制,4KB左右
    3.通常只会携带一些不是很重要的数据
    

    form表单里的action参数
    ​ 1.不写,默认朝当前地址提交
    ​ 2.只写后缀,/index
    ​ 3.写全路径

    前期在朝后盾提交post请求出现403的情况,需要去配置文件中注释掉一行内容

    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',
    ]
    

    视图函数必须有返回值并且返回值都是HTTPresponse对象(render,HttpResponse,redircet都是HTTPresponse对象)

    django后端的视图函数,默认处理的是get请求。但无论是发get还是post请求,都会执行视图函数。

    get请求指向拿到login页面,post请求想提交数据,然后后端做校验

    如何判断当前请求方式
    ​ request.method 拿到的是字符串大写的请求方式 GET POST

    if request.method == "POST":
    	return HttpResponse('收到了')
    return render(request,'login.html')
    

    request方法初始

    request.method	获取请求方式,并且是纯大写的字符串
    如何获取用户提交的post请求数据:
    	request.POST
        request.POST.get()	#默认只会获取列表最后一个元素,里面要写属性名
        request.POST.getlist()	#获取列表,里面要写属性名
     如何获取用户提交的get请求数据:
    	request.GET
        request.GET.get()	#默认只会获取列表最后一个元素,里面要写属性名
        request.GET.getlist()	#获取列表,里面要写属性名
    

    pycharm连接数据库

    django连接mysql

    有两部操作:
    1.配置文件配置

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',#指定数据库类型
            'NAME': 'day50',#指定库的名字
            'USER':'root',#注意 所有的键都是全大写
            'PASSWORD':'',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'CHARSET':'utf8'
        }
    }
    

    2.主动告诉django,不要用默认的MySQLdb连接,而是用pymysql

    可以在项目名下的__init__.py中书写,也可以在应用名下的__init__.py中书写

    import pymysql
    pymysql.install_as_MySQLdb()
    

    django orm简介

    为什么要使用数据库:
    ​ 能够让不会数据库操作的人也能简单方便去操作数据库

    orm的缺点:
    ​ 封装程度高,有时会出现查询效率偏低的问题。
    ​ 所以工作中:简单的用orm 复杂的追求速度 需要手动书写SQL语句

    django中如何操作orm
    ​ 书写模型类,去应用下的models.py中书写模型类(就是类)

    注意:
    之后在写django项目的时候,一个django就对应一个数据库,不要出现多个项目使用同一个数据库的情况

    数据库迁移(同步)命令:

    1. python3 manage.py makemigrations #将数据库的修改记录到小本本上(migrations文件内)
    2. python3 manage.py migrate  #将修改操作正在同步在数据库中
    注意:
    	上面两条命令必须是成双成对出现的,只要修改了models里面跟数据库相关的代码,就必须重新执行上面的两条命令
    

    模型表字段的增删改查

    class User(models.Model):
        id=models.AutoField(primary_key=True)#django当你不指定主键的时候,会自动帮你创建一个id字段,并且作为主键,如果自己创建了,django就不会帮你创建
        username=models.CharField(max_length=255)#charField必须要指定max_length参数,CharField就是mysql的varchar
        password=models.CharField(max_length=32)
        #设置默认值
        #方式一:
        email=models.EmailField(default='123@qq.com')
        #方式二:
        phone=models.BigIntegerField(null=True)
        #还可以直接在提示中给默认值,
    

    字段的修改:
    ​ 直接修改代码,然后执行数据库的迁移命令(两条一条不能少)

    字段的增加:
    方式一:设置默认值 default=‘嘻嘻嘻’
    方式二:允许字段为空 null=True

    字段的删除:
    直接注释掉对应的字段,然后再执行数据库的迁移命令

    模型表数据的增删改查

    数据的查

    data=models.User.objects.filter(username=username,password=password)## <QuerySet [<User: User object>]>
    user_list = models.User.objects.all()# 等价models.User.objects.filter() 所有数据都查出来 里面是一个个的数据对象
    user_obj=data[0] 
    user_obj.username 
    
    fileter返回的结果是一个“列表”,里面才是数据对象,filter括号内可以放多个关键字参数,这多个关键参数在查询的时候是and关系
    

    数据的增

    models.User.objects.create(username=username,password=password)# create方法 会有返回值 返回值就是当前被创建的数据对象本身
    

    数据的改

    models.User.objects.filter(id=edit_id).update(username=username,password=password)
    #批量操作,会将filter查询出来的列表中所有的对象都更新
    

    数据的删

    models.User.objects.filter(id=delete_id).delete()
    #批量操作,会将filter查询出来的列表中所有的对象都删除
    
  • 相关阅读:
    【Android Studio安装部署系列】二十四、Android studio中Gradle插件版本和Gradle版本关系
    【Android Studio安装部署系列】二十三、Android studio查看Gradle版本号
    linux查看文件前几行和后几行的命令
    iphone订阅服务在那里取消
    idea 默认全局配置maven,避免每次新建项目都需要指定自己的maven目录
    Java:session中的invalidate()的作用是什么呢?求解
    SESSION.INVALIDATE()
    Session中清除对象方法比较
    linux--Linux 各目录及每个目录的详细介绍
    Linux 下各个目录的作用及内容
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/11924278.html
Copyright © 2011-2022 走看看