静态文件配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1. 什么是静态文件静态文件,写好之后不改变的文件,如css文件、js文件、图片、第三方框架等 这类文件一般单独使用一个名为 static 的文件夹存放 2. 使用静态文件html文件调用 html在引入时,使用static文件夹的相对路径会在页面无法加载(404 ) 原因是在 urls.py 并没有设置该路由 3. 配置django框架针对这类文件有单独的设置,在settings.py中设置 settings.py最下方 ... STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static' ) ... ] html文件引入 <script src="/static/jQuery-3.6.0.js" ></script> 3. 动态解析在settings.py文件中的接口前缀是可以随意变换的,html文件中不可能一个个更改 因此就需要动态解析,配置在html文件中,如下配置 {% load static %} <script src="{% static 'jQuery-3.6.0.js' %}" ></script>
关闭谷歌浏览器的缓存
request
对象方法1 2 3 4 5 6 7 8 9 10 11 12 13 <form action="" method="post" enctype="multipart/form-data" ></form> action: 控制后端的提交路径 不写: 默认朝当前页面地址提交数据 后缀: /index/ 全写: https://127.0 .0 .1 :8000 /index method提交方法 get post 当有文件提交时需要增加属性: enctype="multipart/form-data"
前期使用post提交时,先在django中的settings.py先注释该行
相关文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 url(r'^login/' , views.login), def login (request ): if request.method == 'POST' : username = request.POST.get('name' ) password = request.POST.get('password' ) hobby = request.POST.getlist('hobby' ) files = request.FILES print (username, password, hobby, files) return render(request, 'demo2.html' ) <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" > <title>Title</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js" ></script> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet" > <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" ></script> </head> <body> <div class ="container "> <div class ="row "> <div class ="col -md -8 col -md -offset -2"> <h1 class ="text -center ">登录界面</h1 > <form action ="" method ="post " enctype ="multipart /form -data "> <p >username : <input type ="text" class ="form -control " name ="name "></p > <p >password <input type ="password " class ="form -control " name ="password "></p > <p > <input type ="checkbox " name ="hobby " value ="fb ">足球 <input type ="checkbox " name ="hobby " value ="bb ">篮球 <input type ="checkbox " name ="hobby " value ="cb ">双色球 </p > <input type ="file " name ="files " multiple > <input type ="submit " class ="btn btn -success btn -block " value ="提交"> </form > </div > </div > </div > </body > </html >
request.method
1 2 3 4 5 6 获取当前请求的请求方法,结果是纯大写的字符串类型,默认处理的也是GET请求 if request.method == 'POST' pass return render(request, 'demo2.html' )
request.POST
1 2 3 4 5 6 7 获取用户通过POST请求过来的基本数据(不包含文件),结果可以看成一个字典{'' :[],'' :[]} get() request.POST.get('name' ) getlist() request.POST.get('hobby' )
request.GET
1 2 3 获取用户通过GET请求过来的基本数据(不包含文件),结果可以看成一个字典{'' :[],'' :[]} get() getlist()
reqest.FILES
Pycharm连接MySQL
Django连接MySQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Django默认使用自带的sqlite3,需要使用MySQL数据库需要配置 1. settings.py文件设置DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'NAME' : 'db01' , 'HOST' : '10.0.0.60' , 'PORT' : 3306 , 'USER' : 'root' , 'PASSWORD' : '123456' , 'CHARSET' : 'utf8' } } 2. 在项目文件夹或者应用文件夹内的__init__.py文件中书写固定的代码= import pymysql pymysql.install_as_MySQLdb() ''' django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'. Did you install mysqlclient or MySQL-python? '''
ORM简介 1 2 3 4 5 6 7 ORM: 对象关系映射 优点: 不用直接操作SQL语句,更好的操作业务层面上的逻辑 缺点: 封装程度太高,有些时候效率低,就需要自己编写SQL语句 类 表 对象 字段 属性 字段对应的值
ORM操作 编写模型类 1 2 3 4 5 6 7 8 9 10 模型类需要写在应用下的 models.py 文件中 class User (models.Model ): id = models.AutoField(primary_key=True ) name = models.CharField(max_length=32 ,verbose_name='用户名' ) age = models.IntegerField('年龄' )
数据库迁移 1 2 3 4 5 6 7 8 9 10 11 1. 将数据库修改记录先记录到对应应用下的migrations文件夹内 python3 manage.py makemigrations 2. 执行数据库迁移操作 python3 manage.py migrate 3. 针对主键字段
数据库同步 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 """ 数据库里面已经有一些表,我们如何通过django orm操作? 1.照着数据库表字段自己在models.py 数据需要自己二次同步 2.django提供的反向同步 """ 1. 先执行数据库迁移命令 完成链接 python manage.py makemigrations 2. 查看代码 python manage.py inspectdb class Userinfo (models.Model ): id = models.IntegerField(blank=True , null=True ) name = models.CharField(max_length=32 , blank=True , null=True ) pwd = models.IntegerField(blank=True , null=True ) class Meta : managed = False db_table = 'userinfo'
数据的CRUD 字段 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 pwd = models.IntegerField('密码' ,null=True ) is_delete = models.IntegerField(default=0 ) 直接改代码然后直接数据库迁移命令即可 python3 manage.py makemigrations python3 manage.py migrate 注释代码然后执行数据库迁移命令即可,删除后的数据也丢失 python3 manage.py makemigrations python manage.py migrate
数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 username = request.POST.get('name' ) password = request.POST.get('password' ) from app01 import modelsuser_obj = models.User.objects.filter (name=username).first() def __str__ (self ): return self.name username = request.POST.get('name' ) password = request.POST.get('password' ) models.User.objects.create(name=username,pwd=password) models.User.object .all () edit_obj.name = username edit_obj.pwd = password edit_obj.save() models.User.objects.filter (id =delete_id).delete()
ORM创建外键关系 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 一对多: 推荐在多的一方 一对一: 在任意方都可以创建,推荐建在查询频率较高的一方 多对多: 自己建表 class Book (models.Model ): title = models.CharField(max_length=32 ) price = models.DecimalField(max_digits=8 , decimal_places=2 ) publish = models.ForeignKey(to='Publish' ) authors = models.ManyToManyField(to='Author' ) class Publish (models.Model ): title = models.CharField(max_length=32 ) email = models.EmailField() class Author (models.Model ): name = models.CharField(max_length=32 ) age = models.IntegerField() author_detail = models.OneToOneField(to='AuthorDetail' ) class AuthorDetail (models.Model ): phone = models.BigIntegerField() addr = models.CharField(max_length=128 )