• django--没有整理,笔记


    https://docs.djangoproject.com/en/2.2/
    常用的数据路命令:
    python manage.py makemigrations 数据移植准备
    python manage.py migrate 数据移植

    配置显示中文是时间区域
    LANGUAGE_CODE = 'zh-hans'

    TIME_ZONE = 'Asia/Shanghai'

    pip install pipenv 安装pipenv
    pipenv install 创建虚拟环境
    在虚拟环境安装库使用 pipenv install *** 卸载使用 pipenv uninstall ***
    进入虚拟环境 pipenv shell
    pipenv --venv 查看虚拟环境对应解释器的安装目录
    退出虚拟环境 exit
    创建项目 项目名称mytest
    django-admin startproject mytest
    python manage.py runserver 启动服务器(在项目目录下)
    python manage.py runserver 9999 改端口号

    创建应用:
    python manage.py startapp bobo 创建bobo的应用
    创建完成时候 首先是把应用添加到项目mytset里面配置文件setting.py里面的 INSTALLED_APPS里

    应用的讲解:
    migrations:数据移植(迁移)模块
    admin:当前应用的后台管理的配置文件
    apps.py:当前应用的配置
    models:数据模型模块,创建数据表子啊这里创建的,使用ROM框架
    tests:自动化测试模块
    views:执行响应的逻辑代码,代码逻辑处理的主要地点,主要的代码编辑区
    创建字段:
    name = models.CharField(max_length=20,verbose_name=u'用户名')#注释
    当指定字段可以为空的时候需要在参数后面加null= True blank = True 这两个都要是True
    也可以赋值默认值 default='',意思是当没有值的时候默认是''
    定义主键是primary_key = True ,verbose_name='注释用的'
    所有类型:
    'AutoField自增', 'BLANK_CHOICE_DASH空白选项破折号', 'BigAutoField大自动场', 'BigIntegerField大积分场',
    'BinaryField二进制字段', 'BooleanField布尔菲尔德', 'CharField查菲尔德', 'CommaSeparatedIntegerField通信分离的tegerfield',
    'DateField日期字段', 'DateTimeField日期时间字段', 'DecimalField德西马尔菲尔德', 'DurationField工期字段',
    'EmailField邮件字段', 'Empty空的', 'Field', 'FieldDoesNotExist', 'FilePathField文件路径字段',
    'FloatField浮点', 'GenericIPAddressField', 'IPAddressField IP', 'IntegerField整数',
    'NOT_PROVIDED', 'NullBooleanField空布尔', 'PositiveIntegerField正整数域',
    'PositiveSmallIntegerField正小整数', 'SlugField', 'SmallIntegerField'小整数, 'TextField'文本字段,
    'TimeField时间字段', 'URLField'网站字段, 'UUIDField',

    做第一个响应网页:
    在views里面引用from django.http import HttpResponse
    创建一个函数def index(request):
    return HttpResponse('Hello word!')
    在项目mytest中的 urls配置这个函数的url

    开发一个Template:
    在web下创建一个templates目录,在该目录下穿件一个HTML文件
    在views.py中返回一个render()传参数:第一个是request,第二个是html文件,第三个传的是字典:key是参数名,value是传递的数据
    是后台传递到模板的参数,在模板的使用是{{参数名}}来直接使用
    注意点:以上的有中情况,当html文件名陈一样,但是应用不一样的时候会出现调用同一个html。这是为了处理这个问题,在templates下
    创建个应用相同的文件夹,然后把html放进去之后就解决了这个问题

    Models介绍:ORM
    一个Models对应一张数据库的表。
    编写Models
    创建一个类继承models.Model,一个类就是一张数据表
    在类中创建数据表的字段
    字段名=models.字段属性(长度限制等)
    参考官方文档:https://docs.djangoproject.com/en/1.10/ref/models/fields/
    创建好数据模型之后要映射成我们的数据表
    执行python manage.py makemigrations app名(可选) 不写就默认整个项目
    再执行python manage.py migrate 进行数据迁移

    成功之后可以在应用下的migrstions下的文件查看
    查看SQl需要执行 python manage.py sqlmigrate 应用名 文件ID 查看SQL语句
    如 python manage.py sqlmigrate web 0001

    取数据库的数据展示在html上:
    在views中导入数据库
    from web.models import testweb
    def index(request):
    user_name = testweb.objects.get(user='张三')#这个就是字段=值,也可以主键值pk=1
    return render(request, 'web/index.html',{'user_name':user_name})
    在html中:进行展现
    <h1>{{ user_name.user }}</h1>
    <h3>{{ user_name.aihao }}</h3>

    admin模块:admin是django自带的自动化数据管理界面
    被授权用户可以直接在admin界面中管理数据库
    首先是创建一个超级用户:
    python manage.py createsuperuser
    username = admin
    password=zyb563151
    登录amdin
    127.0.0.1:8000/admin/
    登录过程中可以遇到403 ,换个浏览器就解决问题了
    登录上去之后是没有任务数据的,需要配置数据 在应用下的admin.py里面 是用来配置admin的
    导入数据库名称
    from web.models import testweb
    admin.site.register(testweb)

    数据有了但要改一下显示问题,让他显示人名称
    早在models下数据库testweb下添加一个方法
    __str__(self)或者__unicode__(self) -->版本不同不同
    return self.uesr

    html中循环展示:
    {% for xx in xxs %}
    HTML语句
    {% endfor %}

    首先是views里面先要获取所有的对象
    def index(request):
    user_names = testweb.objects.all()
    return render(request, 'web/index.html',{'user_names':user_names})#返回的是一个查询结果的集合对象 可以看做是一个列表
    HTML里面写

    Django中的超链接
    html中<a href后面是目标地址
    template 中可以用{% url 'app_name:app_name' param %}#app_name:应用名称 app_name:连接名称 param:地址参数,如user_name
    其中app_name:app_name都是在url中配置
    第一种写法:更urls,写include()的第二个参数位置,namespace = 'web'
    第二种写法:应用下写在url()的第三个参数位置,name='user_name'
    区别是:是否使用include引用了另一个url配置文件
    最后在应用的urls中加上
    app_name = '应用名'

    编辑响应函数:
    使用request.POST['参数名']获取表单数据
    models.Article.objects.create(user,content) 创建对象

    Templates 过滤器
    写在模板中的,属于django的模板语言
    可以修改模板中的变量,从而显示不同的内容
    怎么使用过滤器?
    {{变量 | 过滤器}}
    列:{{list | length}}
    可以叠加 {{value | filter1 | filter2 |...}}
    如在编辑界面的代码
    <input type="hidden" name="user_aihao" value="{{ aihao.id | default:'0'}}">
    中的| default:'0'就是过滤器,意思就是没有的时候我给0

    django shell:
    它是一个Python的交互式命令行程序,自动引入了我们的项目环境,可以使用它和我们的项目进行交互
    怎么使用 Django Shell?
    python manage.py shell
    比如:from web.models import testweb
    testweb.objects.all() 可以直接获取数据
    主要是可以调试 测试未知的方法
    比如:testweb.objects.all().values()
    不知道返回什么东西,什么格式,可以查看

    admin
    想要在admin看见更多的信息 显示其他字段
    创建admin的配置类
    class testwebAdmin(admin.ModelAdmin)
    注册语句后加 admin.site.register(testweb.testwebAdmin)

    list_display = ('user','aihao')
    list_display同时支出tuple和list

    list_filer = ('put_time',) 过滤器
    更多的admin的参考https://docs.djangoproject.com/en/1.10/ref/contrib/admin/

    连接mysql用它作为数据库
    # DATABASES = {
    # 'default': {
    # 'ENGINE': 'django.db.backends.mysql',
    # 'NAME': '数据库名字',
    # 'USER':'登录数据库的用户名',
    # 'PASSWORD':'密码',
    # 'HOST':'IP地址',
    # }
    # }
    还要安装数据路的驱动
    pip install mysql-python
    放在 解释器venvLibsite-packages下
    出来在环境下执行
    pip.exe install mysqlclient-1.3.13-cp37-cp37m-win_amd64.whl
    python manage.py makemigrations
    python manage.py migrate

    css js的文件配置在配置文件中加入路劲
    STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')#static是文件夹放css/js等
    ]

    -----------------------------------------------------------------------------------------------------------
    数据库的增删该查:
    查询数据库数据:
    查询单条的数据是 变量= testweb.objects.get(pk=aihao_id)
    变量= testweb.objects.filter(name='张三',age='18')# 这个像是select里面的and
    查询多条的数据是 list = testweb.objects.all()
    for i in list:
    变量=list.name 变量=list.age 等

    增数据 首先是实例化一个对象 message = testweb()
    message.name = '李四'
    message.age = '19'
    message.save()

    删除数据 在查询数据之后跟delete() 如:
    变量= testweb.objects.get(pk=aihao_id)
    变量.delete()

    list = testweb.objects.all()
    for i in list:
    变量=list.name.delete()

    ----------------------------------------------------------------------------------------------------------------------
    HTML :
    placeholder='请输入'#这是输入框的提示信息
    value='{{message.name}}'#显示name 也可以用if else
    value="{% if message.name=='张三' %}'我是张山{% end if%}#如果name是张三 就显示我是张三
    value="{% if not message.name=='张三' %}'我不是张山{% end if%}#如果name不是张三 就显示我不是张三
    value="{% ifequal message.name '张三' %}'我是张山{% end ifequal %}#如果name是张三 就显示我是张三
    value="{% ifequal message.name | slice:'2' '张三' %}'我是张山{% end ifequal %}#如果前两个name是张三 就显示我是张三

    --------------------------------------------------------------------------------------------------------------------------
    坑:
    安装的mysql8.x数据迁移的时候遇到django.db.utils.OperationalError: (2059, <NULL>)
    是应为MySQL8.x采用了新的加密方式,但Django2.x并不识别此种加密,导致无法连接到数据库
    解决方式是
    cmd
    mysql -u root -p
    USE mysql;
    # 修改加密方式
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    # 刷新数据库
    FLUSH PRIVILEGES;
    在尝试数据迁移就成功了。

    ------------------------------------------------------------------------------------------------------------
    HTML中的下拉框选择的数据我们常常要做后台验证,取值方式是
    <select name="ds">
    <option value="是">是</option>
    <option value="否">否</option>
    </select>
    在views中取的是value的值
    ds = request.POST['ds']
    print(ds)

  • 相关阅读:
    2017 《Java》预备作业计科1502宋奇蕊
    在 Kubernetes 上调度 GPU 资源
    ceph
    网络设备的 38 个知识点
    CF1066 ABCD
    单调队列优化动态规划
    对拍
    【关于此博客】
    使用Morphia框架操作mongodb
    通过mybatis读取数据库数据并提供rest接口访问
  • 原文地址:https://www.cnblogs.com/Mr-Simple001/p/11384124.html
Copyright © 2020-2023  润新知