day19-URL+视图+模板+ORM

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

上节内容回顾:

    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)  ## 不根据顺序,根据id

       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}

                    xiangxi_info = test_list[kwargs['nid']]

                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标签做特殊设置  <form  enctype="multipart/form-data">

        obj = request.FILES.get('fafafa')

        obj.name  #名字

         

        file_path = os.path.join("upload",obj.name)

        f = open(file_path, 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/ -> 类

        ====》

        建议:两者都用

from django.views  import  View

class  Home(View):

     def get(self,request):

         print(request.method)

         return  render(request,'')

     def post(self,request):

         return render(request, '')

url(r'^home',Home.as_view())  调用类里面的,如果是get调用get,post调用post

    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)

 

from django.contrib import admin

from cmdb  import  models

            admin     admin.site.register(models.UserInfo)

    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

        字段:

            字符串类型

            数字

            时间

            二进制

            自增    uid = models.AutoField(primary_key=True) 不会再自动生成ID列

        字段的参数:

            null=True               -> db是否可以为空

            default            -> 默认值

            primary_key        -> 主键

            db_column          -> 列名,更新列名字,

            db_index=True          -> 索引   普通索引

            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










本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1910512,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
JSON 数据库 数据格式
[Python]Django 视图(View)和URL 与 模板(Template)
[Python]Django 视图(View)和URL 与 模板(Template)
|
前端开发 Python JavaScript
Django 中url补充以及模板继承
Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root"}), 这样在视图函数中,就可以获取这个默认参数name: def index(request,name): ...
837 0
|
6月前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
64 0
|
6月前
|
JavaScript
vue截取URL中的参数
vue截取URL中的参数
68 0
|
2月前
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
46 0
|
3月前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
3月前
|
Java
JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值
45 0
|
4月前
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
219 0
|
4月前
|
JavaScript
js 获取并解析 url 中参数的三种方法
js 获取并解析 url 中参数的三种方法
400 0
|
5月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之在调用接口传入的图片URL参数,文件在本地或者非上海地域OSS链接,该怎么办
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。