Django(复习篇)

项目创建
1. 虚拟环境
python -m venv my_env
​
cd my_env
activate/deactivate
​
pip install django
​2. 项目和app创建
cd mypros
django-admin startproject Pro1
django-admin startapp app1
​3. settings配置INSTALLED_APPS【app1"】TEMPLATES【 'DIRS': [os.path.join(BASE_DIR,"templates")]】LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'
MVT Demo
urls --> app.views --> templates/test.html
​
### urls.py 
from app1.views import test1
urlpatterns = [...,path("/test1",test1)
]
​### app1.views.py
def test1(request):return render(request,"app1/test1.html",context={"msg":"hello world"})
​### templates/test1.html
# TEMPLATES【 'DIRS': [os.path.join(BASE_DIR,"templates")]】
# "app1/test1.html"
new >> Pro1/templates
new >> Pro1/templates/app1/test1.html
{{ msg  }}

ORM
### install mysql dependency
pip install mysqlclient 【recommend】
pip install pymysql【app/__init__.py:import pymysqlpymysql.install_as_MySQLdb()
】
​### settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql',"NAME":"test1","HOST":"localhost""PORT":3306,"USER":"root","PASSWORD":"root",}
}
​### mysql
mysql -uroot -proot
show databases;
create database test1;
​### orm
class Users(models.Model):# id 自动生成name = models.CharField(max_length=255,verbose_name="用户名")age = models.IntegerField(verbose_name="用户年龄")class Account(models.Model):KIND_CHOICE = ((1,"普通用户"),(2,"VIP用户"),)# id 自动生成balance = models.DecimalField(max_digits=10,decimal_places=2,verbose_name="账户余额")kind = models.IntegerField(choices=KIND_CHOICE,verbose_name="账户类型")user = models.ForeignKey(to="app1.Users",verbose_name="账户用户名",on_delete=models.CASCADE)
​### migrate
python manage.py makemigrations
python manage.py migrate

Admin Manger
### simple register model(admin.py)
from django.contrib import admin
from .models import Users,Account
admin.site.register(Users)
admin.site.register(Account)
​### create super user: admin manage-user(Terminal)
python manage.py createsuperuser### admin page show:verbose_name(models.py)
class Users(models.Model):class Meta:verbose_name = verbose_name_plural = "用户"passclass Account(models.Model):class Meta:verbose_name = verbose_name_plural = "用户账户"pass
 
### admin page show: list_display(admin.py)
# @admin.register(Users)
class UsersAdmin(admin.ModelAdmin):list_display = ("id","name","age")
​
@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):list_display = ("id","user","balance","kind")# admin.site.register(Users)
# admin.site.register(Account)
admin.site.register(Users,UsersAdmin)

### admin page show: app verbose name(apps.py)
class App1Config(AppConfig):verbose_name = "我的应用1"pass

 

### admin page show:model object str name
class Users(models.Model):def __str__(self):return "%s"%(self.name)pass
​
class Account(models.Model):def __str__(self):return "%s账户"%(self.user.name)pass

### admin page show:records ordering(admin.py)
class UsersAdmin(admin.ModelAdmin):ordering = ["id"]   # ordering = ["-id"]pass

### admin page show:fieldsets of add form(admin.py)
class AccountAdmin(admin.ModelAdmin):fieldsets = (("账户信息", {"description":"请输入用户信息","fields":("kind","balance")}),("所有者",{"description": "请输入用户所有者","fields":("user",)}))

 

### admin page show:search fields(admin.py)
search_fields = ["name"]
 
### admin page show:Tabular inline Edit(admin.py)
class AccountInline(admin.TabularInline):extra = 1model = Account
​
class UsersAdmin(admin.ModelAdmin):inlines = [AccountInline,]
 
### admin page show:custom css style (admin.py)
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
​
# admin.py
class UsersAdmin(admin.ModelAdmin):class Media:css = {"all": ("/static/css/admin/admin_user.css",),}pass

Template
{{ msg }}
{{ user.name }}
​
{% csrf_token %}
​
{% for user in users %}{% if user.age > 18 %}<p>adult</p>{% else %}<p>minor</p>{% endif %}
{% end for %}
​
{% for key,value in dict.items %}<p>{{ key }}:{{ value }}</p>
{% endfor %}
​
{{ data | default:"<p style='color:red'>还没有任何数据哦</p>" }}
{{ content | slice:":20" }}
{{ getDate | date:"Y/m/d" }}{% extends "base.html" %}{% block main %}
{% endblock %}
URL
### re_path:query_param、named-group
from django.urls import path,re_path
urlpatterns = [path("index",test,name="index"),re_path(r"^app1/(?P<page>[1-9]+)$",test1),
]
def test(request):# localhost:8000/index?name=joden&age=20print(request.GET.dict)print(request.GET.get("name"))def test1(request,page):# re_path page group => param: page  print("page:",page)print(request.GET.dict())
​
​### url name
re_path(r'app1/(?P<page>[1-9]+)$', test1, name="index"),
​
def test(request):print(reverse("index",kwargs={"page":2}))
​### url namespace
from django.urls import include
path("app1",include("app1.urls"))
# app1/urls.py
app_name = "app1" 
re_path(r'page/(?P<page>[1-9]+)$', test1, name="index"),
# views.py
reverse("app1:index",kwargs={"page":2}) 
CBV
CBV:Class Basic View
https://docs.djangoproject.com/zh-hans/4.1/ref/class-based-views/### View
from django.view import View
class TestView(View):def get(self,request,*args,**kwargs):return render(request,"app1/test1.html")def post(self,request,*args,**kwargs):passurlpatterns = [path("app",TestView.as_view()),
]### TemplateView
from django.views.generic.base import TemplateView
class TestTemplateView(TemplateView):tempate_name = "app1/test1.html"def get_context_data(self,**kwargs):super().get_context_data(self,**kwargs)context = {"users":Users.objects.all(),}return context
​
​
### ListView
from django.views.generic.list import ListView
class TestListView(ListView):template_name = "app1/test1.html"model = Userpaginate_by = 2     # 3 user/per pagedef get_context_data(self,**kwargs):context = super().get_context_data(self,**kwargs)print(self.get_paginator(self.object_list,self.paginate_by).num_pages)return context{% for user in object_list %}
{% endfor %}

Cookie and Session
### cookie
class TestListView(ListView):def get(self,request,*args,**kwargs):# get cookie(request)request.get_cookie("name")response = super(TestListView, self).get(*args,**kwargs)# set cookie(response)response.set_cookie("name","joden")return response
​### session
class TestListView(ListView):def get(self,request,*args,**kwargs):# get sessionget_session_name = request.session.get("sname","")# set sessionrequest.session["sname"] = "value"return super(TestListView, self).get(*args,**kwargs)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试用例之翻页功能

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

python socketserver模块开启ssl双向认证

server端代码如下 import socketserver import ssl# 需要校验客户端 ssl_context ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) # 发给客户端 ssl_context.load_cert_chain(certfile"./server.crt", keyfile"./server.key") # 信任库 ssl_conte…

LabVIEW中NIPackageManager功能介绍

LabVIEW中PackageManager功能介绍 使用NIPackage Manager可安装、更新、修复和删除NI软件。 安装NI软件 使用PackageManager浏览和安装NI软件。 1. 在浏览产品选项卡上&#xff0c;单击产品类别以显示该类别中的可用产品。 2. 选择要安装的产品&#xff0c;然后单击…

OpenCV:图像矫正与仿射变换

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

Netty--文件编程

3. 文件编程 3.1 FileChannel ⚠️ FileChannel 工作模式 FileChannel 只能工作在阻塞模式下 获取 不能直接打开 FileChannel&#xff0c;必须通过 FileInputStream、FileOutputStream 或者 RandomAccessFile 来获取 FileChannel&#xff0c;它们都有 getChannel 方法 通过…

ablation study

文章目录 ablation study1、消融实验思想是什么&#xff1f;2、消融实验意义3、消融实验应用场景举例 ablation study 1、消融实验思想是什么&#xff1f; “消融实验”&#xff08;ablation study&#xff09;通常指的是通过逐步移除系统的一部分来评估该系统的贡献。这种方法…

Java设计模式-创建型模式-建造者模式

建造者模式 建造者模式案例与工厂模式的区别&#xff1a;Builder 注解 建造者模式 建造者模式是将一个复杂对象的构件与表示分离&#xff0c;使得同样的构件过程可以创建不同的表示。 建造者模式将内部构件的创建和组装分割开&#xff0c;一般使用链式编程&#xff0c;代码整洁…

讲座录播 | 邹磊教授:图数据库的概念和应用

2023年10月16日 由中国计算机学会主办的 “CCF Talk”直播间 进行了题目为 术语解读:“图计算”的内涵与应用 主题直播活动 讲座吸引7708人观看 图作为一种灵活表达复杂关联关系的数据结构&#xff0c;目前已广泛地应用于社会治理、医疗健康、电网分析、计算材料、计算育…

在国内使用 FOFA 查找免费无需注册无需验证的 ChatGPT Web 站点

这个文章不知道为什么火了。出于网络安全的原因&#xff0c;我在这里提醒大家&#xff1a; 本文提供的是一种白嫖 ChatGPT 的方法&#xff0c;是通过查找互联网上对外来访问者不设防的 ChatGPT Web 站点实现的。但这并不代表这些站点的主人就一定欢迎陌生人该网站的访问并使用该…

【Qt之QStandardItemModel类】介绍

描述 QStandardItemModel类提供了一个通用的模型&#xff0c;用于存储自定义数据。QStandardItemModel可以用作Qt标准数据类型的存储库。它是 Model/View类 之一&#xff0c;是 Qt的model/view框架 的一部分。 QStandardItemModel提 供了一种基于项目的传统方法来处理模型。 Q…

【CSDN 每日一练 ★☆☆】【数组】最大子序和

【CSDN 每日一练 ★☆☆】【数组】最大子序和 数组 题目 给定一个整数数组 nums&#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1…

CSRF 漏洞详解

CSRF 漏洞详解 文章目录 CSRF 漏洞详解漏洞描述漏洞原理漏洞场景漏洞评级漏洞危害漏洞验证漏洞利用漏洞防御典型案例 漏洞描述 CSRF&#xff08;Cross-Site Request Forgery&#xff09;漏洞是一种Web应用程序安全漏洞&#xff0c;它允许攻击者利用受害者的已认证会话来执行未…

numpy常用方法总结

这里写自定义目录标题 前言具体函数&#xff1a;np.zeros()np.sum()np.reshape()np中的转置函数 前言 机器学习中会经常使用numpy下的函数&#xff0c;需要明确方法的功能及使用的注意事项&#xff0c;多练习&#xff0c;才能熟能生巧&#xff1b; 具体函数&#xff1a; np.…

【Transformer从零开始代码实现 pytoch版】(五)总架构类的实现

Transformer总架构 在实现完输入部分、编码器、解码器和输出部分之后&#xff0c;就可以封装各个部件为一个完整的实体类了。 【Transformer从零开始代码实现 pytoch版】&#xff08;一&#xff09;输入部件&#xff1a;embeddingpositionalEncoding 【Transformer从零开始代…

Spring boot 整合elasticsearch

文章目录 初始化RestClient 初始化RestClient 在elasticsearch提供的API中&#xff0c;与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中&#xff0c;必须先完成这个对象的初始化&#xff0c;建立与elasticsearch的连接。 分为三步&#xff1a; 1&#xf…

CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片

CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片 Sub-1GHz&#xff0c;是指小于1GHz频率的统称。Sub-1GHz无线电频段应用的主要特点&#xff1a;&#xff08;1&#xff09;频率较低波长较长&#xff0c;传输距离远&#xff0c;穿透性强&#xff1b;&#xff0…

xinput1_3.dll丢失的详细解决步骤办法和比较,五种有效的解决办法

今天想和大家分享一个电脑中经常出现的问题——xinput1_3.dll丢失。这个文件丢失是一件常见的问题。不知道小伙伴们有没有遇到过这样的问题&#xff0c;如果你遇到这样的问题今天就教大家xinput1_3.dll丢失的详细解决步骤办法和比较&#xff0c;五种有效的解决办法。 一.xinput…

YOLOv5 分类模型的后处理

YOLOv5 分类模型的后处理 flyfish 简化源码测试 import torch import numpy as np from torchvision import transforms import torch.nn.functional as Fdata0 np.random.random((1, 7)) data0 np.round(data0,7) print(data0.shape) print(data0) data1 torch.from_n…

力扣labuladong一刷day7共3题

力扣labuladong一刷day7共3题 文章目录 力扣labuladong一刷day7共3题一、216. 组合总和 III二、111. 二叉树的最小深度三、752. 打开转盘锁 一、216. 组合总和 III 题目链接&#xff1a;https://leetcode.cn/problems/combination-sum-iii/ 思路&#xff1a;还是组合只是既有n…

【Axure高保真原型】树切换动态面板案例

今天和大家分享树切换动态面板的原型模板&#xff0c;点击树的箭头可以打开或者收起子节点&#xff0c;点击最后一级人物节点&#xff0c;可以切换右侧面板的状态到对应的页面&#xff0c;左侧的树是通过中继器制作的&#xff0c;使用简单&#xff0c;只需要按要求填写中继器表…