路由层 urls.py

1. 数据操作

'''
表字段的增删改查:
新增的字段:
    1.直接提供默认值 default
    2.设置改字段可以为空 null=True
注意的是 不要轻易的注释models.py中任何跟数据库相关的代码
主要是跟数据库相关的代码 你在处理的时候一定要小心谨慎
'''

# 数据的增删改查:
# 1.数据的查:
    # get():
    res = models.User.objects.get(username=username)
        # 1.条件存在的情况下 获取的直接是数据对象本身
        # 2.条件不存在的情况下 会直接报错  所以不推荐你使用get方法查询数据
    # filter()
    res = models.Userinfo.objects.filter(username=username)
        # 1.条件存在的情况下 获取到的是一个可以看成列表的数据 列表里面放的才是一个个数据对象本身
        # 2.条件不存在的情况下  并不会报错 返回的是一个可以看成空列表的数据
        # 3.filter括号内可以写多个参数逗号隔开  这多个参数在查询的时候 是and关系
        # 4.filter的结果支持索引取值  但是不支持负数  并且不推荐你使用索引  推荐你使用它封装好的方法 first取第一个数据对象

# 2.数据的增:直接将用户名和密码写入数据库
    # 1.create()
    user_obj = models.User.objects.create(username=username,password=password)
        # 1.括号内些关键字参数的形式 创建数据
        # 2.该方法会有一个返回值 返回值就是当前对象本身
    # 2.利用对象点方法的方式
        user_obj = User(username='aa')
        user_obj.save()  # 将当前对象保存到数据库中

# 3.数据的改:
    # 方式1:
    # update():去数据库中修改对应的数据
    """update方法会将filter查询出来的queryset对象中所有的数据对象全部更新"""
        models.User.objects.filter(pk=edit_id).update(username=username,password=password)   # 批量更新

    # 1.获取想要编辑的数据:
        edit_id = request.GET.get('edit_id')
    # 2.获取用户新修改的所有的数据:
        username = request.POST.get("username")
        password = request.POST.get("password")
    """POST中也是可以获取GET请求携带的参数"""

    # 方式2: 获取当前数据对象 然后利用对象点属性的方式 先修改数据  然后调用对象方法保存(不推荐你使用第二种方式,效率低,挨个重新写入一遍)
    edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()  # pk能够自动帮你查询出当前表的主键字段名
    edit_obj.username = username
    edit_obj.password = password
    edit_obj.save()

# 4.数据的删:
    # delete():获取想要删除的数据id 直接删除
    models.Userinfo.objects.filter(pk=delete_id).delete()

2. 图书管理系统表设计

# 表与表之间的关系:一对一,一对多,多对多

# 图书
class Book(models.Model):
    title = models.CharField(max_length=32)
    # DecimalField:总共八位 小数占两位
    price = models.DecimalField(max_digits=8,decimal_places=2)

    # 书和出版社是一对多的关系,外键字段键在多的一方
    publish = models.ForeignKey(to='Publish')  # to指定跟谁是外键关联的,默认关联的是表的主键字段
    """ForeignKey字段:django orm在创建表的时候 会自动给该字段添加_id后缀"""
    # 书和作者是多对多的关系,外键字段建在任何一方都可以,但是推荐建在查询频率比较高的一方
    authors = models.ManyToManyField(to='Author')
    """authors字段仅仅是一个虚拟字段,不会再表中展示出来,仅仅是用来告诉django orm 书籍表和作者表示多对多的关系,自动创建第三张表"""

# 出版社
class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=255)

# 作者
class Author(models.Model):
    name = models.CharField(max_length=32)
    phone = models.BigIntegerField()
    # 一对一字段,建在哪张表都可以,但是推荐你建在查询频率比较高的那张表
    author_detail = models.OneToOneField(to='AuthorDetail')
    """OneToOneField字段:django orm在创建表的时候,会自动给该字段添加_id后缀"""

# 作者详情
class AuthorDetail(models.Model):
    addr = models.CharField(max_length=255)
    age = models.IntegerField()

3. 路由层 urls.py

urls.py : 路由与视图函数对应关系 >>> 路由层

# urls.py
from django.conf.urls import url
from django.contrib import admin

# 由一条条映射关系组成的urlpatterns这个列表称之为路由表
urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

# 函数url关键参数介绍
# regex:正则表达式,用来匹配url地址的路径部分
# view:通常为一个视图函数,用来处理业务逻辑
# kwargs:可选的要传递给视图函数的默认参数(字典形式)
# name:一个可选的name参数

# 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项
APPEND_SLASH=True   # 默认为True,自动在网址结尾加/

3.1 无名分组与有名分组

# 无名分组:会将括号内匹配到的内容当做 位置参数 传递给后面的视图函数test(request,args)
url(r'^test/(\d+)/', views.test),

# 有名分组:会将括号内匹配到的内容当做 关键字参数 传递给后面的视图函数test(request,month=123)
url(r'^test/(?P<month>\d+)/', views.test),

# 有名无名不可以结合使用
# url(r'^test/(\d+)/(?P<month>\d+)/', views.test),

# 有名无名单独使用的情况下  可以用多个
url(r'^test/(\d+)/(\d+)/', views.test),
url(r'^test/(?P<xxx>\d+)/(?P<month>\d+)/', views.test),
url(r'^test_addsajdsjkahdkjasjkdh/(\d+)/', views.testadd,name='xxx'),
url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>\d+)/', views.testadd,name='xxx'),

3.2 反向解析

# 反向解析:根据某一个东西 动态解析出一个结果 该结果可以直接访问对应的url
    url(r'^test_add/', views.testadd,name='xxx')
    # 前端解析
    {% url 'xxx' %}
    # 后端解析
    from django.shortcuts import render,HttpResponse,redirect,reverse
        url = reverse('xxx')

# 无名分组反向解析
    url(r'^test_addsajdsjkahdkjasjkdh/(\d+)/', views.testadd,name='xxx'),
    # 前端解析
        <a href="{% url 'xxx' 1 %}">222</a>
    # 后端解析
        url = reverse('xxx',args=(1,))

# 有名分子反向解析
url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>\d+)/', views.testadd,name='xxx'),
    # 前端解析
        <a href="{% url 'xxx' 1 %}">222</a>
        <a href="{% url 'xxx' year=1 %}">222</a>
    # 后端解析
        url = reverse('xxx',args=(1,))
        url = reverse('xxx',kwargs={'year':123})

# 注意:向解析的别名 一定不要重复

## 用无名分组或者有名分组+反向解析 完成数据的编辑功能
'''
url(r'^edit_user/(\d+)/',views.edit_user,name='edit')

user_queryset = models.User.objects.all()

{% for user_obj in user_queryset %}
    <td>
        <a href="{% url 'edit' user_obj.pk %}">编辑</a>
        <a>删除</a>
    </td>
{% endfor %}

def edit(request,edit_id):
    pass
'''

3.3 路由分发

'''
django里面的app可以有自己的static文件,templates文件夹,urls.py
项目名下面的urls.py不再做路由与视图函数对应关系
而是做一个中转站  只负责将请求分发到不同的app中
然后在app的urls.py完成路由与视图函数的对应关系
'''

url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls)),

# 给路由与视图函数对应关系 起一个别名  后续根据这个别名 就能够动态解析出所对应的url

url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls)),

3.4 名称空间

# 总路由
    url(r'^app01/',include('app01.urls',namespace='app01'))
    url(r'^app02/',include('app02.urls',namespace='app02'))

# 通常情况下 起别名的时候 前面可以加上你的应用名

4. 伪静态

将动态网页假装成是静态的
这样做的目的是为了提高搜索引擎的SEO查询优先级
搜索在收录网站的时候 会优先收录看上去像是静态文件的资源

但是无论你怎么使用伪静态进行优化 你也干不过RMB玩家

5. 虚拟环境

通常针对不同的项目 只会安装该项目所用的模块 用不到的一概不装
不同的项目有专门的解释器环境与之对应
每创建一个虚拟环境 就类似于重新下载了一个纯净的python解释器
虚拟环境不要创建太多个 

6. django版本区别

urls.py中1.x用的是url,而2.x用的是path
并且2.x中的path第一个不支持正则表达式,写什么就匹配什么
如果你觉得不好用,2.x里面还有re_path 这个re_path就是你1.x里面的url

原文地址:https://www.cnblogs.com/yushan1/p/11722027.html

时间: 2024-10-08 22:38:03

路由层 urls.py的相关文章

路由系统(urls.py)

路由系统(urls.py) 正则表达式匹配 urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), ] Django 2.0版本中的路由系统已经替换成下面的写法 from django.urls

django之表设计、路由层等

图书管理系统表的设计 from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=32) # 总共八位 小数占两位 price = models.DecimalField( max_digits=8,decimal_places=2) # 书和出版社是一对多的关系 外键字段键在多的一方 publish = models.F

Django之路由层

Django之路由层 一 路由的作用 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中,如下图: 二 简单的路由配置 # urls.py from django.conf.urls import url # 由一条条映射关系组成的urlpatterns这个列表称之为路由表 urlpatterns = [ url(regex, view, kwargs=None, name=None), # url本质就是一个函

Django之Urls.py模块

Django之路由层 一 路由的作用 ? 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中,如下图: 二 简单的路由配置 # urls.py from django.conf.urls import url # 由一条条映射关系组成的urlpatterns这个列表称之为路由表 urlpatterns = [ url(regex, view, kwargs=None, name=None), # url本质就是一

urls.py路由系统分发的本质

路由系统分发的本质 反向生成redirect跳转url 1.在urls.py中指定url的name from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^index/', views.index, name="INDEX"), url(r'^login/', views.login), ] 2.在views视图函数中

Django 路由 urls.py

URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 通过循环对于多个url匹配会从上到下,匹配成功后就直接执行对应的视图函数,直接break跳出循环 参数说明: 一个正则表达式字符串 一个可调用对象,通常为一个视图函数或一个指定视图函

DJANGO入门系列之(Django请求生命周期and路由层)

昨日回顾 1 orm 创建表,新增字段,修改,删除字段,不能创建数据库 -字段属性phone=models.CharField(max_length=64,null=True) -null=True 代表该列可以为空 2 数据的增删改查 -增(1):User.objects.create(address='') -增(2):实例化产生一个user对象,user对象的save方法 -删:User.objects.filter(id=1,name='lqz').first().delete() -删

路由层

路由层 1.Django中路由作用 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行 2.简单配置 from django.conf.urls import url ? urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] ? -第一个参数是正则表达式(如果要精准匹配:'^publish/$') -

Django 路由层(urlconf)

Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL(conf)就需要告诉服务器执行哪个程序代码. 一  路由配置的简单使用 path :不能使用正则 ,path('路径',views.方法) re_path :可以使用正则 ,re_path(r'正则表达式路径',views.方法) from django.urls import path,re_p