• 第19天 django 文件上传 CBV和FBV html模板语言 url的正则表达式 django的路由名称 django使用mysql注意的事项 model的CRUD django的字段参数 django的外键


    上节内容回顾:
    1、Django请求生命周期
    -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串
    -> URL对应关系(匹配) -> 视图函数 -> 打开一个HTML文件,读取内容

    2、创建django projcet

    django-admin startproject mysite

    ..

    mysite
    mysite
    - 配置文件
    - url.py
    - settings.py

    cd mysite
    python manage.py startapp cmdb

    mysite
    mysite
    - 配置文件
    - url.py
    - settings.py
    cmdb
    - views.py
    - admin.py
    - models.py # 创建数据库表

    3、配置

    模板路径
    静态文件路径
    # CSRF

    4、编写程序

    a. url.py

    /index/ -> func

    b. views.py

    def func(request):
    # 包含所有的请求数据
    ...
    return HttpResponse('字符串')
    return render(request, 'index.html', {''})
    retrun redirect('URL')

    c. 模板语言
    return render(request, 'index.html', {'li': [11,22,33]})

    {% for item in li %}
    <h1>{{item}}</h1>
    {% endfor %}


    *********** 索引用点 **********
    <h2> {{item.0 }} </h2>

    一、路由系统,URL
    1、url(r'^index/', views.index),
    url(r'^home/', views.Home.as_view()),
    2、url(r'^detail-(d+).html', views.detail),
    3、url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail)

    PS:
    def detail(request, *args,**kwargs):
    pass

    实战:
    a.
    url(r'^detail-(d+)-(d+).html', views.detail),

    def func(request, nid, uid):

    pass

    def func(request, *args):
    args = (2,9)


    def func(request, *args, **kwargs):
    args = (2,9)

    b.
    url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail)

    def func(request, nid, uid):
    pass

    def funct(request, **kwargs):
    kwargs = {'nid': 1, 'uid': 3}

    def func(request, *args, **kwargs):
    args = (2,9)
    4、 name

    对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****

    url(r'^asdfasdfasdf/', views.index, name='i1'),
    url(r'^yug/(d+)/(d+)/', views.index, name='i2'),
    url(r'^buy/(?P<pid>d+)/(?P<nid>d+)/', views.index, name='i3'),



    def func(request, *args, **kwargs):
    from django.urls import reverse

    url1 = reverse('i1') # asdfasdfasdf/
    url2 = reverse('i2', args=(1,2,)) # yug/1/2/
    url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/


    xxx.html

    {% url "i1" %} # asdfasdfasdf/
    {% url "i2" 1 2 %} # yug/1/2/
    {% url "i3" pid=1 nid=9 %} # buy/1/9/

    注:
    # 当前的URL
    request.path_info
    5、多级路由

    project/urls.py
    from django.conf.urls import url,include
    from django.contrib import admin

    urlpatterns = [
    url(r'^cmdb/', include("app01.urls")),
    url(r'^monitor/', include("app02.urls")),
    ]

    app01/urls.py
    from django.conf.urls import url,include
    from django.contrib import admin
    from app01 import views

    urlpatterns = [
    url(r'^login/', views.login),
    ]

    app02/urls.py
    from django.conf.urls import url,include
    from django.contrib import admin
    from app02 import views

    urlpatterns = [
    url(r'^login/', views.login),
    ]

    6、默认值(欠)

    7、命名空间(欠)


    二、视图
    1、获取用户请求数据
    request.GET
    request.POST
    request.FILES
    PS:
    GET:获取数据
    POST:提交数据

    2、checkbox等多选的内容
    request.POST.getlist()
    3、上传文件
    # 上传文件,form标签做特殊设置
    obj = request.FILES.get('fafafa')
    obj.name
    f = open(obj.name, mode='wb')
    for item in obj.chunks():
    f.write(item)
    f.close()

    4、FBV & CBV
    function base view

    url.py
    index -> 函数名

    view.py
    def 函数(request):
    ...
    ====》
    /index/ -> 函数名

    /index/ -> 类

    ====》

    建议:两者都用

    5、装饰器


    三、模板

    四、ORM操作
    select * from tb where id > 1
    # 对应关系
    models.tb.objects.filter(id__gt=1)
    models.tb.objects.filter(id=1)
    models.tb.objects.filter(id__lt=1)

    创建类

    a. 先写类
    from django.db import models

    # app01_userinfo
    class UserInfo(models.Model):
    # id列,自增,主键
    # 用户名列,字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

    b. 注册APP

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
    ]
    c. 执行命令
    python manage.py makemigrations
    python manage.py migrate

    d. ********** 注意 ***********
    Django默认使用MySQLdb模块链接MySQL
    主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
    import pymysql
    pymysql.install_as_MySQLdb()

    1. 根据类自动创建数据库表
    # app下的models.py

    python manage.py makemigrations
    python manage.py migrate


    字段:
    字符串类型


    数字


    时间


    二进制

    自增(primary_key=True)

    字段的参数:
    null -> db是否可以为空
    default -> 默认值
    primary_key -> 主键
    db_column -> 列名
    db_index -> 索引
    unique -> 唯一索引
    unique_for_date ->
    unique_for_month
    unique_for_year
    auto_now -> 创建时,自动生成时间
    auto_now_add -> 更新时,自动更新为当前时间

    # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
    # obj = UserGroup.objects.filter(id=1).first()
    # obj.caption = "CEO"
    # obj.save()

    choices -> django admin中显示下拉框,避免连表查询
    blank -> django admin是否可以为空
    verbose_name -> django admin显示字段中文
    editable -> django admin是否可以被编辑
    error_messages -> 错误信息欠
    help_text -> django admin提示
    validators -> django form ,自定义错误信息(欠)


    创建 Django 用户:python manage.py createsuperuser




    2. 根据类对数据库表中的数据进行各种操作

    一对多:

    a. 外检
    b.
    外键字段_id
    c.
    models.tb.object.create(name='root', user_group_id=1)

    d.

    userlist = models.tb.object.all()
    for row in userlist:
    row.id
    row.user_group_id
    row.user_group.caption


    =================== 作业:用户管理 ====================
    1、用户组的增删改查
    2、用户增删该查
    - 添加必须是对话框
    - 删除必须是对话框
    - 修改,必须显示默认值

    3、比较好看的页面

    4、预习:
    http://www.cnblogs.com/wupeiqi/articles/5246483.html




















  • 相关阅读:
    c#之静态构造函数和单例模式
    ugui之圆角矩形头像实现
    一些网站
    unity3d之实现各种滑动效果
    unity3d之切换场景不销毁物体
    unity3d之技能栏冷却
    unity3d之控制人物转向移动并播放动画
    vs常用快捷键
    构造函数的继承
    编写可维护的javascript 随笔
  • 原文地址:https://www.cnblogs.com/xyyhcn/p/10415467.html
Copyright © 2020-2023  润新知