1.1 伪静态
伪静态是相对于静态文件来说的,例如https://www.cnblogs.com/hesujian/p/11165818.html
我们就称之为伪静态,因为他其实不是html静态页面,只是伪装成html静态页面
伪静态的好处:
1、美观(传统的问号拼接看起来比较杂乱)
2、seo(搜索引擎优化技术),搜索引擎比较喜欢收录静态页面,所以大家都做成伪静态去增加收录机会
1.2 实现伪静态以及路由分发
既然我们已经用伪静态的url去访问服务器了,那么服务器怎么拿到需要的值
比如我们把 :http://127.0.0.1:8000/up_student/?id=12
伪装成 :http://127.0.0.1:8000/up_student/12
后台接收数据就需要用到路由分发的技术
路由分发及在后台匹配uri时,通过正则表达式的分组,把需要的值分组,再传到处理的函数中
# 1、直接通过分组接收,按顺序传值 def up_student(request,id,name): print(id,name) urlpatterns = [ url(r'^up_student/(w+)/(w+)', up_student), ] # 2、我们可以通过有名分组,不用按顺序也能传值 def up_student(request,name,id): print(id,name) urlpatterns = [ url(r'^up_student/(?P<id>w+)/(?P<name>w+)', up_student) ]
1.3 路由正则
1、$符,以什么结尾
url(r'^test/',test), # 这种在访问时在/后面加什么都可以访问 url(r'^test/$',test) # 这种就是必须/结尾才可以
2.^ 通配
url(r'^',test)
通配会匹配所有的url,可以用作匹配不到url时返回的页面(404)
所以我们通配符必须放在最后,不然他会先匹配通配,导致原有的url无法访问
1.4 反向路由
反向路由主要是针对form表单,当我们的uri发生变化时,所有的链接也要相应的发生变化
所有有个反向路由,可以让form表单里的action跟随uri的变化而变化
后台url:设置name属性
url(r'^sdsdsdsad/',test,name="xxx")
前端form表单:action改为随后面的name变化而变化
<form action="{% url "login" %}" method="post">
1.5 django创建app
我们会把不同类型的逻辑函数和uri放到不同的文件里,这个文件就成为app
创建有两种方式
1、pycharm创建项目时创建,只能创建一个
2、命令行创建,进入到项目的路径下输入
python manage.py startapp 自定义名称
创建完的app文件中有如下就和文件
admin.py: 写和django-admin相关的配置
apps: 对app的配置
models: 数据表模型
views: 视图函数
tests: 测试
1.6 路由分组
# 先要导入include方法 from django.conf.urls import include # 总urls.py url(r'^app01/', include('app01.urls')) # 分app urls.py # 导入视图函数 from app01 import views url('^test',views.test)
2. 函数视图
函数视图主要写一些逻辑函数,函数视图主要分为两种
1、FBV function based view 写函数处理逻辑
2、CBV class based view 通过类处理逻辑
在CBV中
url需要做些改变
url(r'^login/', views.Login.as_view()),
处理逻辑的类也需要继承View这个类
from django.views import View class Login(View): def dispatch(self, request, *args, **kwargs): super(Login, self).dispatch(request, *args, **kwargs) # 自定制逻辑 def get(self): pass def post(self): pass # 如果是get提交就进入get函数,post提交就进入post函数 # 底层走的是dispatch函数,他会根据你的提交方式分发到不同函数里 # 我们也可以重写这个方法,加入一些其他限制,例如限制ip等等
2.1 提交方式
""" 常见的几种提交方式 get :请求数据 post :提交数据 delete :删除数据 put :更新数据 patch :更新部分数据 """
3. Django中的ORM初步
3.1 ORM配置
""" 1、创建数据库 2、配置mysql的数据库链接 setting文件里的DATABASES设置为 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 's8day61', ## 数据库名称 'USER': 'root', 'PASSWORD': '123', ## 安装 mysql 数据库时,输入的 root 用户的密码 'HOST': '127.0.0.1', } 3、注册app 也是在settings文件中的INSTALLED_APPS 把你的app文件名加进去 4、需要把mysqldb设置为pymysql链接 python3中用的是pymysql python2中使用的是mysqldb 为了兼容,都改成pymysql app下的__init__文件 import pymysql pymysql.install_as_MySQLdb() 5、创建表(2个命令) python manage.py makemigrations python manage.py migrate """
3.2 单表的增删改查

# 先导入models文件 from class_app import models # 增 models.Classes.objects.create(name="xxx") # 增加会有一个返回值,这个返回值就是这次插入的对象 # 查 # 查出所有对象 ==> 列表里套对象 models.Classes.objects.all() # 查出单个对象 ==> 取第一个对象 models.Classes.objects.first() # 也可以 models.Classes.objects.all().first() # 过滤查询 models.Classes.objects.filter(name="xxx").all() # 删 models.Classes.objects.filter(name="xxx").delete() # 改 models.Classes.objects.filter(name="xxx").update(name="ooo") # 如果需要改的值很多,并且在一个字典里,也可以用**打散 models.Classes.objects.filter(name="xxx").update(**dic)
3.3 django中orm的表的正查与反差

# 如果一张表和其他的表建有外键关系,那么从这张表查另一张表称为正查,反之称为反差 # 先建立两个外键关系的表 class Classes(models.Model): # 如果我们不设置一张表的id时,django会自动帮我创建一个自增的主键id name = models.CharField(max_length=32,null=True) class Students(models.Model): name = models.CharField(max_length=32,null=True) cid = models.ForeignKey("Classes",null=True) # 会自动帮我们和另一张表的主键建立外键关系 # 正查 for obj in students: print(obj.cid.name) # 可以直接通过对象点里面的属性就可以点出另一个类的对象,可以继续取值 # 反查 obj.student_set.all() # 就是查出所有的对象 # 还可以通过下划线直接取到另一张表的值 # values是取出括号里对应的值,通过列表里套字典的形式 # values_list 是取出括号里对应的值, 通过列表里套元组的形式 models.Classes.objects.values("id","name","cid__name").all()
3.4 双下划线

# 查询时通过外键名__另一张表的名字 可以查到关联表的值 # eg: models.Classes.objects.values("id","name","cid__name").all() #这个cid__name可以查询到关联表对应的name # 查询时可以在filter中加入限制条件 __lt 代表小于 __gt代表大于 # eg: models.Classes.objects.filter(id__lt = 3).all() # id < 3 models.Classes.objects.filter(id__gte = 3).all() # id >= 3