zoukankan      html  css  js  c++  java
  • Django框架学习 5.26 待补充

    5.26

    昨日回顾

    静态文件配置

    - 浏览器窗口输入url之所以能访问到对应的资源源,是因为后端提前开放了该资源的访问接口
    - 约定俗成把html文件放在templates文件夹下
    - 静态文件:
    	网站已经写好的,或者是第三方现成的代码,直接使用,放在static文件夹下
    	css,js,img,框架
    	
    - static文件夹内还会创建几个文件夹:css,js,img,第三方
    
    静态文件配置:settings.py
    
    STATUC_URLS = '/static' # 访问静态文件的令牌
    
    STATICFILES_DIRS = [
    	os.path.join(BASE_DIR,'static'),
    	os.path.join(BASE_DIR,'static1'),
    ]
    查找顺序是从上往下依次查找
    
    令牌动态解析
    <link href="/static/a.txt"></link>
    {% load static %}
    <link href="{% static 'a.txt'%}"></link>
    

    request对象方法

    以登陆功能为例
    
    request.method # 全大写的字符串格式,获取当前的请求方式,GET,POST
    request.GET # 获取url的?后面携带的参数
    request.POST # 获取post请求提交过来的普通键值对
    request.POST.get() # 得到列表的最后一个元素
    request.POST.getlist() # 得到整个列表
    
    前期再往django提交post请求的时候先去配置文件中注释一行代码
    MIDDLEWARE = {}
    

    pycharm连接数据库

    连接pycharm数据库
    下载对应的驱动
    

    django连接MySql

    配置文件配置 settings.py
    django不能配置库,需要自己创建
    # 1.
    DATABASES = {
    	'default':{
    		'ENGINE':'django.db.backends.mysql',
    		'NAME':'db1',
    		'USER':'root',
    		'PASSWORD':'6008',
    		'HOST':'127.0.0.1',
    		'PORT':3306,
    		'CHARSET':'utf8'
    	}
    }
    
    # 2. init文件指定pymysql
    import pymysql
    pymysql.install_as_MySQLdb()
    

    django ORM 重要

    能够让一个不会sql语句的python程序员也能够更简单的操作数据库,极大地提升开发效率
    去应用下的models.py中书写模型类
    
    class Userinfo(models.Model):
    	uid = models.AutoField(primary_key=Ture)
    	# 如果没有创建主键,orm会自动帮你创建一个名为id的主键字段
    	# uid int primary key auto_increment
    	username = models.CharField(max_length=32)
    	# 默认是varchar,一定要指定max_length
    	password = models.IntegarField()
    

    数据库迁移命令

    python3 manage.py makemigrations
    # 将操作记录到migration文件夹内,不是真正的从左数据库
    python3 manage.py migrate
    # 将操作真正同步到数据库中
    # 只要在models中书写了数据库相关代码,必须要重新执行上面两行代码
    # pycharm可以快速提示
    

    简单的orm语句

    # 字段的增删改查
    # 增
    	1. 终端里自己加默认值
    	2. null = True
    	3. default = '666'
    # 删
    	注释代码,两条命令
    # 改
    	增改代码执行两条命令
    
    # 数据的增查
    # 增
    	from app01 import models
    	# create()
    	user_obj = models.UsrInfo.objects.create(**kwargs)
    	# save()
    	user_obj = models.User(**kwargs)
    	user_obj.save()
    	
    # 查
    	# filter()
    	user_obj_list = models.UserInfo.objects.filter(**kwargs)
    	user_obj = user_obj_list[0]
    	user_obj = user_obj_list.first() # 推荐
    	
    
    

    今日内容

    • 数据的查,改,删
    • django orm中如何创建表关系
    • django请求生命周期流程图
    • 详细讲django每一个部分详细的内容
      • 路由层:urls.py

    OPM操作数据

    查找数据

    # views.py
    def userlist(request):
    	# 方式1
    	data = models.User.object.filter()
    	print(data)
    	# 方式2
    	user_queryset = models.User.object.all()
    	# 给html传值方式1
    	return render(request,'userlist.html',{'user_queryset':'user_queryset'})
    	# 传值方式2
    	return render(request,'userlist.html',local())	
    
    
    html中展示数据
    {{ user_obj.id }}
    {{ user_obj.username }}
    
    

    编辑数据功能

    点击编辑按钮后,朝后端发送编辑数据请求,将编辑按钮所在的那一行数据的主键发送给后端

    在a标签的href后面加上id

    <a href="/edit_user/?user_id={{user_obj.id}}"></a>
    
    
    def edit_user(request):
    	# 在后端获取url 问号后面的参数
    	edit_id = request.GET.get('user_id')
    	# 查询当前用户想要编辑的数据对象
    	edit_obj = models.User.objects.filter(id=edit_id).first()
    	# 将数据展示到页面上
    	return render()
    
    

    修改数据

    # 修改方式1
    models.User.object.filter(id=edit_id).update(username=username,password=password)
    # 这个方法只修改filter中选中的数据
    
    # 修改方式2
    edit_obj.username = username
    edit_obj.password = password
    edit_obj.save()
    # 这个方法会将所有的字段,无论改没改,都重写一遍
    
    

    删除数据

    .delete()

    在html的href中加id,告诉后端要删除哪个用户
    
    # views.py
    def delete_user(request):
    	delete_id = request.GET.get('user_id')
    	# 直接去数据库中找到对应的数据删除即可
    	models.User.objects.filter(id=delete_id).delete()
    	return redirect('/userlist/')
    	# 删除完了,转到展示信息界面
    
    

    删除数据内部并不是真正的删除,知识给数据添加一个标识字段,标识当前数据是否被删除的,仅仅只是将字段修改一个状态

    orm创建表关系

    表关系:一对多,一对一,多对多

    例子:图书,作者,出版社

    • 图书和出版社是一对多的关系,外键字段键在多的一方:book
    • 图书和作者是多对多的关系,创建第三张表存储关系
    • 作者与作者介绍是一对一关系
    # models.py 先建表
    class Book(models.Model):
    	title = models.CharField(max_length=32)
    	price = models.DecimalField(max_digit=8,decimal_places=2)
    	# 图书和出版社是多对一,外键放在书里
    	publish = models.ForeignKey(to='Publish')
    	# 默认把出版社表的主键拿来做外键
    	# 图书和作者是多对多关系 外键字段建在任意一方均可,但是推荐建在查询频率高的一方
    	authors = model.ManyToManyField(to='Author')
    	# authors是一个虚拟字段,主要告诉orm,书籍表和作者表是多对多关系
    	
    class Publish(models.Model):
    	name = models.CharField(max_length=32)
    	addr = models.CharField(max_length=32)
    	
    class Author(models.Model):
    	name = models.CharField(max_length=32)
    	age = models.IntegerFields()
    	# 与作者信息是一对关系,外键建在查询频率高的表
    	author_detail = models.OneToOneField(to='AuthorDetail')
    	
    class AuthorDetail(models.Model):
    	phone = models.BigIntegerField()
    	addr = models.CharField(max_length=32)
    
    

    配置数据库,修改DATABASES

    创建表后执行两条命令,去navicat中查看字段,orm会自动在外键字段的后面加_id,publish_id

    总结

    三种关系:
    	ManyToManyField()
    	OneToOneField()
    	ForeignKey() # 多对一
    在django1.x版本,外键默认都是级联更新的,2.x,3.x不是
    
    

    django请求生命周期流程图

    重要,必会

    浏览器 - wsgi - 中间件 - 路由系统 - 视图函数 - [orm-数据库, template]img

    • WSGI和wsgiref和uwsgi是什么关系:
      • WSGI是协议
      • wsgiref和uwsgi是实现改协议得到功能模块

    路由层

    路由匹配

    # urls.py
    urlpatterns = [
    	url(r'^admin/',admin.site.urls),
    	#url(r'^test',views.test),
    	#url(r'^teatadd',views.testadd)
    ]
    # url方法第一个参数会拿去正则匹配,只要匹配到,就立马执行后面的内容
    # 所以输入testadd,会匹配到test,到不了第三个url,所以只会执行test
    # 在test后面加/
    # 严格限制后缀名的结尾,否则后缀名之后无论写什么都会进入test,加上$
    	url(r'^test/$',views.test),
    	url(r'^teatadd/$',views.testadd)
    	
    # 如果url中的后缀没有加斜杠,第一次匹配不成功,django会帮你加上/,做重定向,再匹配一次
    # 这个功能可以在配置文件里改
    # settings.py
    APPEND_SLASH = False
    
    # 设置不加后缀名,就转向首页,正则匹配为空才转
    url(r'^$',views.test)
    
    
    # views.py
    
    
    

    无名分组

    有名分组

  • 相关阅读:
    d is less efficient than [0-9]
    How to navigate back to the last cursor position in Visual Studio Code?
    Is there a short-hand for nth root of x in Python 开n次方
    Disable source maps in Chrome DevTools
    Disable map files on SASS
    快速理解脏读,不可重复读,幻读
    AWR学习
    oracle set命令详解
    TimescaleDB上手和性能测试
    Centos 7.5 通过yum安装GNOME Desktop时出现:file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x86_64 conflicts with file from package grub2-common-1:2.02-0.65.el7.centos.2.noarch
  • 原文地址:https://www.cnblogs.com/telecasterfanclub/p/12970435.html
Copyright © 2011-2022 走看看