django框架3
内容概要
- 注册登录功能编写
- django请求生命周期流程图
- 路由层相关知识
1.路由匹配
2.无名有名分组
3.反向解析
4.名称空间
5.路由分发
内容详情
注册登录功能编写
1.使用自带的sqlite3数据库
第一次使用pycharm链接sqlite3也需要先下载驱动
2.编写注册、登录功能
'''静态文件无法拖拽到pycharm文件栏:C盘不支持 采用cv操作'''
前期提交post请求初选403 需要配置文件注释一行
from django.shortcuts import render, HttpResponse, redirect
def reg(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
confirm_pwd = request.POST.get('confirm_password')
# 1.先判断两次密码是否一致
if not password == confirm_pwd:
return HttpResponse('两次密码不一致')
# 2.判断用户名是否已存在
is_user = models.UserInfo.objects.filter(name=username)
if is_user:
return HttpResponse('当前用户已存在')
# 3.写入数据库
models.UserInfo.objects.create(name=username, pwd=password)
# return HttpResponse(f'{username}注册成功')
# 4.直接跳转到登录页面:后面还可以实现 注册之后自动登录
return redirect('/login/')
return render(request, 'reg.html')
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
is_user = models.UserInfo.objects.filter(name=username).first()
# filter结果是列表套对象
if not is_user:
return HttpResponse('用户名不存在')
if str(is_user.pwd) == password: # 获取到的用户输入是字符串 数据库字段是整型
return HttpResponse("登录成功")
return HttpResponse('密码错误')
return render(request, 'login.html')
django请求生命周期流程图
整体概括请求的走向以及django的核心组成部分
参考群内截图
后期django的学习就按照图上的部分 一块一块的详细学!!!
路由层相关知识
路由匹配
路由匹配的特点是 只要匹配上了就会立刻结束执行对应的视图函数
并且url方法的第一个参数其实是一个正则表达式
只要正则表达式能够从用户输入的后缀中匹配到内容就算匹配上了!
eg:
正则是test 内容是test 那么可以匹配出test文本
正则是test 内容是testadd 那么还可以匹配出test文本
都算匹配上了!!!
演变过程
正则是test/ 内容是test 那么首次无法匹配
# django二次追加斜杠机制
首次匹配不上 那么django还会让浏览器默认加斜杠再次发送请求
test 301
test/ 200
'''
了解:斜杠机制可以取消 但是不推荐
APPEND_SLASH = False
'''
正则是test/ 内容是abcdefgtest/ 那么可以匹配出文本test/
可以在正则的最前面加上上箭头来限制
'''解决路由前面可以随意乱写的问题'''
正则是^test/ 内容是test/abc/edf/acd/ 那么可以匹配出文本test/
可以在正则的最后面加上$来限制
'''解决路由后面可以随意乱写的问题'''
# 由于第一个参数是正则 所以当项目特别大 对应关系特别多的时候要格外的注意是否会出现路由顶替的现象
小扩展:
可以定制一个主页面 用户不携带后缀可以直接访问(掌握)
url(r'^$',views.home)
也可以定义一个尾页 用户输入一个没有对应关系的直接返回(了解)
url(r'.*',views.error)
无名有名分组
url(r'^test/([0-9]{4})/$', views.test)
"""
路由匹配成功之后就会调用视图函数默认情况下会自动给视图函数传递一个request位置参数
test(request)
如果路由匹配中使用括号对正则表达式进行了分组 那么在调用视图函数的时候
会将括号内匹配到的内容当做位置参数传递给视图函数
test(request,括号内正则表达式匹配到的内容)
上述特性django称之为'无名分组'
"""
url(r'^testadd/(?P<user_id>[0-9]{4})$', views.testadd)
"""
给括号内的正则表达式起别名之后 匹配成功则会讲括号内匹配到的内容按照关键字参数传递给视图函数
testadd(request,user_id=括号内正则表达式匹配到的内容)
上述特性django称之为'有名分组'
"""
# 两者是否可以混合使用
url(r'^test/(\d+)/(?P<user_id>[0-9]{4})/$', views.testadd) # 不可以
无名有名分组不能混合使用!!! 单个可以重复使用
url(r'^test/(\d+)/(\d+)/$', views.testadd) # 可以
url(r'^test/(?P<a>\d+)/(?P<b>\d+)',views.testadd) # 可以
反向解析
"""
a标签的href可以写网址的全称 也可以写后缀
href='https://www.baidu.com'
href='/login/' # 自动补全当前服务的ip和port
href='127.0.0.1:8000/login/'
"""
1.页面上有很多a标签链接了其他路由
2.路由匹配表达式出现了变化 html页面上的地址全部失效
# 反向解析
通过反向解析可以获取到一个结果 该结果可以访问到一个路由
步骤1:给对应关系起别名
url(r'^func666/',views.func,name='func_view')
步骤2:使用反向解析获取结果
前端:
{% url 'func_view' %} # func666/ 结果可以访问路由
后端:
from django.shortcuts import reverse
reverse('func_view') # func666/ 结果可以访问路由
# 无名分组反向解析
步骤1:给对应关系起别名
url(r'^func666/(\d+)/',views.func,name='func_view')
步骤2:使用反向解析获取结果
'''无法明确括号内正则表达式的内容 需要人为指定'''
前端:
{% url 'func_view' 123 %} # func666/123/
后端:
from django.shortcuts import reverse
reverse('func_view',args=(666,)) # func666/666/
# 有名分组反向解析
步骤1:给对应关系起别名
url(r'^func666/(?P<id>\d+)/',views.func,name='func_view')
步骤2:使用反向解析获取结果
'''无法明确括号内正则表达式的内容 需要人为指定'''
前端:
{% url 'func_view' 123 %} # func666/123/
{% url 'func_view' id=123 %} # func666/123/
后端:
from django.shortcuts import reverse
reverse('func_view',args=(666,)) # func666/666/
reverse('func_view',kwargs={'id':1}) # func666/1/
"""
疑问:无名有名反向解析中的手动传值 这个值在实际工作中到底可以是什么
一般情况下这个值可以是数据的主键值、页面的页码、区域的编号等
"""
路由分发
"""
如果一个django项目特别庞大 里面有很多应用 每个应用下有很多对应关系
那么django自带的路由层里面的代码就会非常非常的多 如何优化???
根据应用的不同拆分到不同的应用中
django支持每个应用都可以有自己独立的
路由层、模板层、静态文件、视图层(默认)、模型层(默认)
上述特性能够让django在分组开发上更加的方便、快捷
所有人都可以在应用中开发完整的项目功能
最后汇总到一个空的django项目中 然后通过路由分发整合所有人的应用
"""
1.创建多个应用 并去配置文件中注册
INSTALLED_APPS = [
'app01',
'app02'
]
2.在多个应用中编写相同的路由
urlpatterns = [
url(r'^index/',views.index111)
]
urlpatterns = [
url(r'^index/',views.index)
]
3.路由分发
总路由
from django.conf.urls import url, include
from app01 import urls as app01_urls
from app02 import urls as app02_urls
url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls))
"""总路由只负责分发 不负责视图函数对应"""
上述代码还可以简写
from django.conf.urls import url, include
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls'))
名称空间
1.不同的应用使用了相同的别名 那么反向解析是否自动识别
index_view app01/index/
index_view app02/index/
2.验证发现默认情况下是不会自动识别应用前缀的 如何解决反向解析问题
方式1:名称空间
总路由添加名称空间
url(r'^app01/',include('app01.urls',namespace='app01')),
url(r'^app02/',include('app02.urls',namespace='app02'))
应用反向解析自动提示
reverse('app01:index_view')
reverse('app02:index_view')
{% url 'app01:index_view' %}
{% url 'app02:index_view' %}
方式2:只需要确保反向解析的别名在整个项目中不重复即可!!!
可以在别名的前面加上应用名的前缀
url(r'^index/',views.index,name='app01_index_view')
url(r'^index/',views.index,name='app02_index_view')
"""
名称空间其实是可有可无的知识 但是在实际工作中还是有不少程序员喜欢使用
"""
django框架3的更多相关文章
- MVC其实很简单(Django框架)
Django框架MVC其实很简单 让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同. 下面就是通过使用Django来完成以上功能的例子: 首先,我们 ...
- Django框架-目录文件简介
Rhel6.5 Django1.10 Python3.5 Django框架-目录文件简介 1.介绍Django Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django, ...
- Django框架学习
两个月前学习的Django框架,写了个简易婚恋调查网站,代码就懒得全贴了,有两张图记录下
- django框架的models
在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
- MySQL在Django框架下的基本操作(MySQL在Linux下配置)
[原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------ ...
- django框架介绍
主要内容 1. Django框架发展 2. Django架构,MTV模式 3. 开发流程 4. 开发实例——Poll python下各种框架 一 ...
- Django学习(二) Django框架简单搭建
为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Djan ...
- Django - Django框架 简单介绍
Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...
- Django框架全面讲解
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
随机推荐
- JS 实现权限列表移动
JS 实现列表移动 学习内容: 需求 总结: 学习内容: 需求 用 JS 实现列表移动 实现代码 <html> <head> <meta http-equiv=" ...
- Factorials and Powers of Two
分析:我们可以看出这道题目的描述并不是很复杂,就是说对于一个给定的整数n,我们能否把他拆成k个powerful的数,也就是说这k个数要么是2的幂次,要么是某个数的阶乘,并且我们要让当前的k越小越好:然 ...
- 如何在 Java 中实现无向环和有向环的检测
无向环 一个含有环的无向图如下所示,其中有两个环,分别是 0-2-1-0 和 2-3-4-2: 要检测无向图中的环,可以使用深度优先搜索.假设从顶点 0 出发,再走到相邻的顶点 2,接着走到顶点 2 ...
- Java基础之浅谈泛型
简单的介绍了Java泛型类型的使用.上手容易,深入很难.
- toFixed()与银行家舍入
toFixed()与银行家舍入 一直在用toFixed()方法做浮点数的舍入取值,如果只是客户端展示数据是没有多大问题的,但是如果涉及到和后端互交,数据的精度可能会导致接口对接失败,当然了,涉及安全性 ...
- 随机获取gbr颜色值
- AcWing 158. 项链 (最小表示法)
项链 题源:https://www.acwing.com/problem/content/160/ 题目 原理:最小表示法 找字典序最小的字符串 循环移位,破环成链 (把原串复制一倍) memcpy ...
- async异步函数的执行顺序
1 async function async1(){ 2 console.log('async1 start') //2 3 await async2() 4 //await async2()后面的内 ...
- 阿里云服务器的购买、基本配置、(xshell)远程连接、搭建环境
一.服务器的购买 1.购买时间点:搞活动的时候.利用学生身份购买 (1)活动:想白嫖一台服务器 双十一,可以在双十一左右,时间提前一点,百度或B站,搜阿里云服务器.腾讯服务器(618可能也有) 一般, ...
- css3 做出顶边倾斜的 梯形 div
效果图: <html> <head> <meta charset="utf-8"> <title>顶边倾斜的div梯形</ti ...