Django前后端分离之后端实践

news2024/11/15 23:33:02

django-admin  startproject  djweb  生成djweb项目

django-admin  startapp   news      生成news应用

配置models文件

class NewInfo(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    b_date=  models.DateField()
    read = models.IntegerField()

插入数据,进入交互环境: python manage.py shell
 

In [1]: from news.models import NewInfo

In [2]: NewInfo.objects.all()
Out[2]: <QuerySet []>

# 查询为空,这时插入数据
In [11]: n1= NewInfo()

In [12]: n1.title = 'title1'

In [13]: n1.read = 999

In [14]: n1.b_date= '2024-01-01'

In [15]: n1.save()

In [20]: res = NewInfo.objects.all()[0]

In [21]: res.title  # 保存成功
Out[21]: 'title1'

配置admin文件

from .models import NewInfo
# Register your models here.
admin.site.register(NewInfo)

创建超级用户:python manage.py createsuperuser

用户名 (leave blank to use 'pass'): pass
电子邮件地址: xxx@qq.com
Password:
Password (again):
密码跟 用户名 太相似了。
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

启动项目:python manage.py runserver

登录web页面:http://127.0.0.1:8000/admin

点击增加信息:

 展示中文信息及调整时区:

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

点击删除信息:

自定义admin模型类展示数据

class NewInfoAdmin(admin.ModelAdmin):
    # 自定义模型类
    list_display = ['id','title','b_date','read']
# 自定义模型定义到系统中
admin.site.register(NewInfo,NewInfoAdmin)

 展示结果:

 总路由分配:

from django.contrib import admin
from django.urls import path,re_path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^news/',include('news.urls'))
]

子路由配置:

from .views import home
urlpatterns = [
    path('home/',home),
]

debug模式调试代码:

 关闭原有terminal进程,点击debug模式,选择红色按钮断点,此时刷新web页面的访问url地址.

templates模板配置:
# 项目目录位置的模板
# 'DIRS': [],
'DIRS': [BASE_DIR / 'templates'],

msyql数据库配置:

mysql> create database djweb charset = utf8;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> exit
Bye
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'djweb',
        'USER':'root',
        'PASSWORD':'****',
        'HOST':'localhost',
        'PORT':3306
    }
}

ORM常用字段类型:

  • AutoField
  • BooleanField
  • CharField
  • TextField
  • DecimalField
  • TimeField
  • DateTimeField
  • FileField

常用字段选项:

  • default
  • primary_key
  • unique
  • db_index  # 索引
  • null
  • blank
  • verbose_name  # web可读
  • help_text

关系字段类型:

ForeignKey :一对多,将字段定义在多的一方中

goods = models.ForeginKey('Goods',on_delete=models.CASCADE)

ManyToManyField: 多对多

users = models.ManToManyField('Users',on_delete=models.CASCADE)

OneToOneField:一对一

goods = models.OneToOneField('Goods',on_delete=models.CASCADE)

自定义关联:使用self指定

goods = models.ForeginKey('self',null=True,blank = True)
goods = models.ManyToManyField('self',null=True,blank = True)

多对对模型类实践案例:

class NewInfo(models.Model):
    title = models.CharField(max_length=30,verbose_name='标题',help_text="标题")
    content = models.TextField(max_length=30,verbose_name="内容",help_text='内容')
    # b_date=  models.DateField()
    read = models.IntegerField(verbose_name='阅读量',help_text='评论数量')
    type  = models.ManyToManyField('NewsType',verbose_name='新闻类型',help_text='类型')

class NewsType(models.Model):
    name = models.CharField(max_length=20,verbose_name='名称')

 元选项:

class Meta:
    # 自定义表名,若无此设置默认为表名:应用名+模型类小写
    db_table = 'news'
    verbose_name = '新闻类型'  # 后台可以看到

结果实例:

魔术方法__str__应用

def __str__(self):  #  魔术方法 -- 更改对象显示的内容
    return self.name

模糊条件查询:

  1. xxx.objects.filter(模型类名__条件名 = 值)
  2. xxx.objects.filter(name__contains='xxx')
  3. xxx.objects.filter(name__startswith='xxx')
  4. xxx.objects.filter(name__endswith='xxx')
  5. xxx.objects.filter(name__in=[1,2,3])

比较条件查询:

  1. xxx.objects.filter(id__gt=1) # 大于
  2. xxx.objects.filter(id__lt=1) # 小于
  3. xxx.objects.filter(id__gte=1) # 大于等于
  4. xxx.objects.filter(id__lte=1) # 小于等于

F对象与Q对象(from django.db.models import F)

  1. F对象用于类属性比较   eg:  xxx.objects.filter(read__gte=F('comment'))
  2. Q对象用于逻辑与或非(&|~)  eg:  xxx.objects.filter(Q(read__gte=40) & Q(comment__gt=30))

聚合函数(from django.db.models import Sum,Avg,Max,Min)

eg:    xxx.objects.all().aggregate(Sum('read'))

  • Sum    
  • Count   
  • Avg
  • Max
  • Min

查询和对象关联的数据

一到多查询:

data = xxx.objects.get(id=1)
data.newinfo_set.all()  #  模型类名小写+_set实现

多到一查询:

data = xxx.object.get(id=1)
data.title  # 通过关联的对象直接获取对应的数据

由一模型类查询多模型类数据

语法: 关联模型类名小写__属性名__条件运算符=值

data=xxx.objects.filter(类名小写__属性名__contains='q') # 查询某一属性包含q的字段

由多模型类查询一模型类数据

语法: 一模型类名小写__一模型类属性名__条件运算符=值

data=xxx.objects.filter(类名小写__属性名='yyy') # 查询属性包含yyy的所有字段

ORM增删改查操作:

  • 修改数据:  查到要修改的对象,直接修改字段xxx.title='yyy',save()方法保存
  • 增加数据:  xxx.属性值=特定值, xxx.save()保存
  • 删除数据:  获取data = xxx.objects.all(),然后xxx.delete()直接删除   

路由参数匹配

  1. 位置参数: 
    re_path(r'^index/(\d+)/$',views.show)  # 直接使用小括号
  2. 关键字参数:
    re_path(r'^index/(?P<name1>\d+)/$',views.show)  

 requests对象的属性

  • path
  • method
  • encoding
  • GET       #   ?'key1'='value1'&'key2'='value2'
  • POST
  • FILES
  • COOKIES
  • session

HttpResponse对象

  • content
  • charset
  • status_code
  • content-type

常用方法

set_cookie(key,value='',max_age=None,expires=None)
# max_age  整数,指定过期时间
# expires  指定日期的特定过期时间
# 上面二选一,若无指定关闭浏览器时cookies会过期

eg:  
response = HttpResponse(res_list,status)
response.set_cookie('token','xxx',max_age=4)
response.delete_cookie('token')

session的操作

  1. request.session['key']='value'
  2. request.session.get('key',None)
  3. request.session.clear()  # 清除所有session数据
  4. request.session.flush()  # 清除存储中的整条数据
  5. del  request.session['key']
  6. request.session.set_expiry(value)  # 设置会话的超时时间

类视图的使用步骤:

# views.py
from django.views import View
class NewsView(View):
    def get(self,request):
        pass
    def post(self,request):
        pass    

# urls.py

re.path(r'news/$',views.NewView.as_view())

模板变量

语法:{{ 变量 }}

顺序解析dict.title:

  1. 字典dict['title'] 先属性后方法,若无此属性,再查询对应方法
  2. 若格式dict.0则解析为列表dict[0],若变量不存在则为空字符串

模板标签

语法:{%  xxx  %}

for标签

{% for x in xxx %}
{{forloop.counter} # 表示当前第几次循环,从1开始
{% empty %}  # 列表为空或不存在时执行该逻辑
{% endfor %}

if标签

{% if ... %}
{% elif ... %}
{% else %}
{% endif %}

过滤器

语法:{{ 管道符号 | 过滤器 }}  eg:{{ xxx | lower}}

  • {{ xxx | upper }}
  • {{ xxx | lower }}
  • {{ xxx | add:2 }}
  • {{ datex | date:'y-m-d' }}

注释

语法: {# xxx #}

父模板
 

{% block xxx %}

{% endblock xxx %}

子模板
 

{{% extends '父路径path'%}}

{% block xxx %}

{% endblock xxx %}

中间件

# 初始化
def __init__(self):
    pass
# 处理请求前
def process_request(self,request):
    pass
# 处理视图前
def process_view(self,request,func,*args,**kwargs):
    pass
# 处理视图后
def process_response(self,request,response):
    pass
# 处理异常
def process_exception(self,request,exception):
    pass

自带认证方式登录

from django.contrib.auth import authenticate

username = request.POST['name']
password = request.POST['passwd']
user = authenticate(request,username=username,password=password)
if not user:
    pass

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

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

相关文章

操作系统-信号量机制(整型信号量 记录型信号量)与用信号量实现进程互斥,同步,前驱关系

文章目录 信号量机制总览信号量机制整型信号量记录型信号量例子记录型信号量小结 小结 用信号量实现进程互斥&#xff0c;同步&#xff0c;前驱关系总览信号量机制实现进程互斥信号量机制实现进程同步进程同步信号量实现进程同步 信号量机制实现前驱关系小结 信号量机制 总览 …

mysql项目实战,常用sql语句的实战笔记

1.使用sql语句对数据库进行创建 //创建实验用的数据库 CREATE DATABASE jsschool;//使用当前数据库 USE jsschool;//创建学生表 CREATE TABLE student (sno VARCHAR(20) PRIMARY KEY COMMENT 学生编号,sname VARCHAR(20) NOT NULL COMMENT 学生姓名,ssex VARCHAR(10) NOT NULL…

北斗导航助力春运,让回家之路更温馨便捷

北斗导航助力春运&#xff0c;让回家之路更温馨便捷 春运&#xff0c;即春节运输&#xff0c;是中国在农历春节前后发生的一种大规模的高交通运输压力的现象。它它不仅考验着国家的交通运输能力&#xff0c;也考验着公共服务和应急管理的水平。在这样一个背景下&#xff0c;北…

计算机毕业设计 | SpringBoot大型旅游网站 旅行后台管理系统(附源码)

1&#xff0c; 概述 1.1 项目背景 随着互联网技术的快速发展和普及&#xff0c;旅游行业逐渐转向线上&#xff0c;越来越多的游客选择在线预订旅游产品。传统的线下旅行社模式已不能满足市场需求&#xff0c;因此&#xff0c;开发一个高效、便捷的旅游网站成为行业的迫切需求…

L1-080 乘法口诀数列

一、题目 二、解题思路 三、代码 #include<iostream> using namespace std; int main() {int a1,a2,n;cin>>a1>>a2>>n;if(n1){cout<<a1;return 0; }int a[n*2];cout<<a1<<" "<<a2;a[0]a1;a[1]a2;for(int i2,j2;i&l…

NX/UG二次开发—其他—矩形套料(排料)简介

算法逻辑 排料方法一定时间内获取近似解的算法 看了一些论文和博客&#xff0c;一般排料方法采用最低水平线算法排料&#xff0c;再此基础上增加空余区域填充。 然后配合遗传学算法||模拟退火算法||蚁群算法||免疫算法等&#xff0c;在一定时间内求得一组最优解。 在最简单的…

Windows 启动项无法打开 Aanconda 问题。pyqt noBinding

windows中点击Anaconda navigator 没有反应: ## 解决 (右键运行Anaconda prompt) 以管理员身份运行&#xff1a; 分别运行以下命令&#xff1a; conda update conda conda update anaconda-navigatorpip uninstall PyQt5 pip install PyQt5 pip install pyqtwebengine

Spring GateWay

概述简介 能干什么 反向代理 鉴权 流量控制 熔断 日志监控 Spring Cloud Gateway 与Zuul的区别 在SpringCloud Finchley正式版之前&#xff0c;Spring Cloud推荐的网关是 Netflix提供的Zuul: 1、Zuul 1.x&#xff0c;是一个基于阻塞Ⅳ/O的APl Gateway 2、Zuul 1.x基于Servl…

双非本科准备秋招(19.1)—— Synchronized优化

轻量级锁 流程 一个对象虽然有多线程加锁&#xff0c;但是加锁时间是错开的&#xff0c;那么可以用轻量级锁优化。 语法还是synchronized&#xff0c;只是对使用者是透明的。 static final Object obj new Object(); public static void method1() {synchronized( obj ) {//…

Unity AnimationRigging无法修改权重?

个人理解&#xff0c;已解决无法修改权重的问题: unity自带的动画系统是在FixUpdate和Update之后LateUpdate之前执行&#xff0c;如果在这FixedUpdate或Update函数内更新AnimationRigging内的权重后&#xff0c;内部动画系统会覆盖权重的修改&#xff0c;导致无法正确更新&…

C语言:函数递归

创作不易&#xff0c;给个三连吧&#xff01;&#xff01; 一、什么是递归 递归式一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是自己调用自己。 递归的思想&#xff1a; 把⼀个⼤型复杂问题层层转化为⼀个与原问题相似&#xff0c;但规模较小的⼦问题来求解…

FPC概述及仿真

柔性印刷电路(FPC)是由聚酰亚胺或聚酯薄膜制成的高可靠性和优异的柔性印刷电路板。它具有布线密度高、重量轻、厚度薄、可弯曲性好等特点。 概述 FPC&#xff0c;也被称为柔性印刷电路&#xff0c;因其重量轻&#xff0c;厚度薄&#xff0c;自由弯曲和折叠等优异特性而受到青睐…

Nicn的刷题日常之操作一维数组

1.题目描述 创建一个整形数组&#xff0c;完成对数组的操作 实现函数init() 初始化数组为全0实现print() 打印数组的每个元素实现reverse() 函数完成数组元素的逆置。 要求&#xff1a;自己设计以上函数的参数&#xff0c;返回值。 2.解题 void Init(int arr[], int sz, …

网站被攻击有什么办法呢?

最近&#xff0c;德迅云安全遇到不少网站用户遇到攻击问题&#xff0c;来咨询安全解决方案。目前在所有的网络攻击方式中&#xff0c;DDoS是最常见&#xff0c;也是最高频的攻击方式之一。不少用户网站上线后&#xff0c;经常会遭受到攻击的困扰。有些攻击持续时间比较短影响较…

TI毫米波雷达开发——High Accuracy Demo 串口数据接收及TLV协议解析 matlab 源码

TI毫米波雷达开发——串口数据接收及TLV协议解析 matlab 源码 前置基础源代码功能说明功能演示视频文件结构01.bin / 02.binParseData.mread_file_and_plot_object_location.mread_serial_port_and_plot_object_location.m函数解析configureSport(comportSnum)readUartCallback…

Appium报错:无法打开appPackage

能打开微信、微博&#xff0c;但是要打开另一个app的时候&#xff0c;就出现上面的报错信息。 报错信息说参考&#xff1a;https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md &#xff0c;链接地址变了&#xff0c;找…

数据结构——单链表详解

目录 前言 一.什么是链表 1.概念 ​编辑 2.分类 二.单链表的实现(不带头单向不循环链表) 2.1初始化 2.2打印 2.3创建新节点 2.4头插、尾插 2.5头删、尾删 2.6查找 2.7在指定位置之前插入 2.8在指定位置之后插入 2.9删除pos位置 2.10删除pos之后的 2.11销毁链表…

JavaScript 入门

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…

B站UP主实时信息获取展示php源码

B站UP主实时数据展示系统 - PHP源码分享 想要实时追踪你心仪的B站UP主的最新动态吗&#xff1f;现在&#xff0c;你可以轻松获取并展示B站UP主的实时数据&#xff0c;包括粉丝数、作品数、头像、播放量等关键信息。 功能亮点&#xff1a; 实时更新&#xff1a;系统通过B站AP…

高中学校档案室主要做什么

高中学校档案室主要负责管理、保存和维护学校的各类档案文件。具体工作内容包括&#xff1a; 1. 档案收集&#xff1a;负责收集学校各个部门的档案文件&#xff0c;包括学生档案、教职工档案、教学档案、行政档案等。 2. 档案分类和整理&#xff1a;对收集到的档案文件进行分类…