IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 我在使用Django出现的问题 -> 正文阅读

[Python知识库]我在使用Django出现的问题

外键。

关联关系model
CASCADE 级联删除set_null
on_delete

django与mysql版本不兼容问题

# setting 中开头导入这两句话

from django.db.backends.mysql.base import DatabaseWrapper

DatabaseWrapper.data_types['DateTimeField'] = "DateTime"

新建项目setting设置

TEMPLATES = [
    'DIRS': [os.path.join(BASE_DIR,'templates')]
]

INSTALLED_APPS-----中挂载APP

DATABASES ----增加数据库信息
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day4',# 数据库名字
        'HOST': 'localhost',# 主机名
        'PORT': 3306,# 端口号
        'USER': 'root',# 用户名
        'PASSWORD': 'root',# 密码
    }
}

新建APP指令

# 控制台:Terminal中输入
python manage.py startapp app名字(模块的名字)
# 完成后要在setting中挂载

model模型写完

python manage.py makemigrations				生成迁移文件
python manage.py migrate					执行

新建的test模块

# 首先要导入一个包
import os, django
# 自己manage.py文件中的第六行代码(导入setting)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_day4.settings')
django.setup()


# 必须放在所有代码开头,不然报错

查询的一些方法

all()------得到的是所有的QuerySet对象
all().value()-----得到表中的所有数据
	value括号中可以写需要获取的值
get()------得到的是object 对象
可以通过对象.方法.属性得到数据

form表单中要加

{%csrf_token%}

form表单get、post

post的提交方式不会在url中显示参数;
可以通过request.POST.get方式来获取提交的数据。

get提交的参数会在url中显示;
可以通过request.GET.get的方法来获取提交的参数。

# 方法get()
根据键获取值,只能获取键的一个值
如果一个键同时拥有多个值,获取最后一值(因为覆盖了哦!)
# 方法getlist()------多选框
根据键获取值将键的值以列表返回
可以获取一个键的多个值


# 请求方式总结
1. get从服务器获取数据,不会更改服务器的状态和数据,在url中携带参数发给服务器
2. post则是将一定量的数据发送给服务器,一般会更改服务器的数据
3. post方法的参数不能再url中看到,他是通过body参数传递给服务器,相对于get方法,更加安全,

事务管理

1. with transaction.atomic():	·	with中的代码回滚2.    # 给当前项目中所有的视图都添加了事务控制        # 'ATOMIC_REQUESTS': True    setting中database中加入

session在setting中的设置

# 修改session默认的有效期为一次会话SESSION_EXPIRE_AT_BROWSER_CLOSE = True

APP中新建的urls.py文件

 path('home/', include('home.urls')),  urlpatterns = [    path('index/', views.index),]

模板设置

TEMPLATES = [# 指定查找html文件的默认位置'DIRS'='']

a禁止跳转

<a href="javascript:void(0)" onclick="">删除</a># 禁止跳转

明显注释

#TODO

从头开始流程步骤

1. setting		os.path.join()2. model		class User(models.Model):            username = models.CharField()            class Meta:                db_table = 'bz_user'3. 

上传时涉及文件

1. form表单必须指定enctype属性,	enctype = 'multipart/form-data',否则,FILES将为一个空的类似于字典的对象。	<form method="post" action="" enctype="multipart/form-data">        {% csrf_token %}        <input type="file" name="file"><br>        <input type="submit" value="上传">    </form>2. models需要指定文件上传		字段属性FileFiled或ImageField    	指定upload-to属性,上传到哪    3. views视图中		要用 request.FILES.get()接收	4. 图片上传的位置上(setting设置):	# 1		该方法是在项目的主目录下新建media文件夹,models.py中会指定		sculpture = models.ImageField(upload_to="pics")		最终图片会存储到media>pics中				MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 2  	如果在主目录下创建static>media. 	则setting中设置:    	MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')5. 数据库中存的是相对路径	6. 存的同名的图片时(对文件进行重命名):		使用uuid

static

项目的静态资源

media

用户上传的静态资源

分页步骤、属性、方法、实现

paginator# 分页器属性	1. count	2. num_pages	3. page_range# 分页器方法	1. page()

上传的头像前端展示(图片回显)

1. 图片放在主目录下的media>pics	中2. django寻找静态资源	setting中设置:		1. # 配置用户上传文件|图片的实际储存位置			MEDIA_ROOT = os.path.join(BASE_DIR, 'media')			2. # 将MEDIA_ROOT设置为Django静态资源查找目录                STATICFILES_DIRS = [                    os.path.join(BASE_DIR, 'static'),                    MEDIA_ROOT,                ]		3. html页面展示的两种方法:	1. <td><img src="/static/{{ user.sculpture }}" alt="无法加载" width="50px" height="30px"></td>	2.加一个static标签(加载静态资源目录)	{% load static %}	<td><img src="{% static user.sculpture.url %}" alt="无法加载" width="50px" height="30px"></td>	

分页实现


后台管理setting设置编码时区

LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'# 改成:LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai'

admin后台管理

# 访问网址	127.0.0.1:8080/admin# 用户名、密码、邮箱	运行命令	python manage.py createsuperuser	按提示输入用户名、邮箱、密码(小提示:密码最少8位,不能是纯数字/字符)# 向admin中注册模型	在app里面有个admin.py的文件,在这个文件中注册需要在后台管理页面显示的模型。如果不注册则不会显示	admin.site.register(Department)	admin.site.register(Student)# 1.列表页属性:    list_display:显示字段,可以点击列头进行排序;    list_filter:过滤字段,过滤框会出现在右侧;    search_fields:搜索字段,搜索框会出现在上侧;    list_per_page:分页,分页框会出现在下侧。# 添加、修改页属性:    fields:属性的先后顺序    fieldsets:属性分组    # 如何修改后台管理系统的字段显示名?	通过对对应的模型类中对应字段设置verbose_name="指定要显示的字段名"实现!

中间件方法

1. process_request(self,request) :		执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象2. process_view(self, request, callback, callback_args, callback_kwargs):		调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象3. process_template_response(self,request,response):		在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象4. process_exception(self, request, exception)		当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象5. process_response(self, request, response)		所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象# 激活中间件	MIDDLEWARE = [		'uploadapp.mymiddleware.MyMiddleware',		   app名字			   中间件名字	]

设置获取和删除cookies

# 在谷歌浏览器上,登录了CSDN之后,查看网址左边的那个锁,就可以看到CSDN在你本地浏览器中存储的cookie信息!# response = HttpResponse('设置cookie')response.set_cookie('name', 'xiaoming ')   # 默认关闭浏览器则过期response.set_cookie('name', 'xiaoming', max_age=100)  # 100s后过期return response# 或者username = request.POST.get('username')response = redirect('user:index')response.set_cookie('username', username, max_age=60 * 5)return response# 删除cookiesdef delete(request):    rs = HttpResponse('删除cookie')    rs.delete_cookie('name')    return rs     # 注意 	设置cookie值以及删除cookie值都是response对象的操作,而获取cookie是从requeset相应中获得的。	虽然cookie可以保存状态但注意不要存储敏感信息(密码)。

session之状态保持

# 引言1. cookie的键和值都是明文的形式存储在客户端浏览器上,很不安全!2. 存储方式包括cookie,session,会话一般指session对象。3. 使用cookie,所有数据存储在客户端,注意不要存储敏感信息。4. 使用session方式,所有数据存储在服务器端(以键值对形式存储),在客户端cookie中存储	session_id,用户的重要信息是不会存储在客户端的,下次用户登录只需校验session_id即可,安全!!!5. 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据。	注意:不同的请求者之间不会共享这个数据,与请求者一一对应。	# session 依赖于cookie
cookie本身最大支持4096字节。保存在客户端,会被拦截或窃取。# session特点1. session是以键值对进行存储的2. session依赖于cookie,唯一标识码sessionid  保存在cookie中3. session也有过期时间
# 使用使用session之前需要先执行makemigrations,migrate的模型映射文件命令,在数据库中有生成django_session的表# setting中设置    1. app挂载    2. session中间件 # 数据库字段    1.  session_key(就是上面所说的session_id);    2.  session_data(就是对应的用户的隐私数据);    3.  expire_date(就是session的过期时间)    # session简单操作启用会话后,每个HttpRequest对象将具有一个session属性,它是一个既可读又可写的类似于字典的对象,表示当前的会话。1. get(key, default=None):根据键获取会话的值2. flush():删除当前的会话数据并删除会话的Cookie# 设置session        request.session["name"] = "xiaoming"        request.session.set_expiry(100)       #设置过期时间,单位为秒。到时间则自动删			除。 (比如你网页登录12306,多久时间内再次登录可不用重新登录!) # 对session的访问,只能在服务端获取!        name = request.session.get("name","未登录")        #第二个参数为默认值。如果获取的键不存在则显示默认值。        print(name)	   # 对session的删除   (比如网页中登录12306之后,你退出!)        request.session.flush()清除session所有数据,清除表中的数据及cookie中的sessionid        request.session.clear()清除了session_date中的键值对,但session表中的记录还在        del request.session[key]删除指定的session中的某一个键值        return HttpResponse("完成!")

model模型

https://www.cnblogs.com/suraer/p/8515416.html

使用admin管理表单时admin.py添加

admin.site.register(models.User)

path路径问题

re_path(r'^$', views.index,name='index'),path('',views.index,name='index'),两个一个意思
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:30:50  更:2022-03-04 15:32:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/31 4:18:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码