我待django如初恋的第二天(?´?`?)💕(代码片段)

yangyinyin yangyinyin     2022-12-17     441

关键词:

 

五分喜欢的人,恨不得把他挂在嘴上招摇过市。

有七分喜欢,就只能跟至亲密友分享。

有十分喜欢 ,那就谁也不舍得说了,憋着,每天憋着一点小高兴,

像只松鼠攒着满腮帮子的果仁(*?ω?)

 

---------------------不定时的更新又又叕开始了,且更且珍惜------------------------ 

我要每次都写一遍:前面的还没补完,以此催促不定时更新的我
-----------------------------------------------------------------------------------------------

 

 

 

? 知识准备

  要想更好的掌握后面的内容,你需要先学习这些内容。

  ?? 路由访问

    路由访问如果不加斜杠 会内部自动重定向加斜杠的路由

    (表面看起来像直接给你加了斜杠,但本质是先去查找不带斜杠的,

    如果匹配不上,再重定向加上斜杠的路由。)  

   ?? templates文件夹

    所有的HTML文件默认都放在templates文件夹下。

   ?? static文件夹

    所有的静态文件(css,js,前端第三方类库)默认都放在static文件夹下。

    这个文件夹是需要我们自己手动创建的,可以建在与templates同级目录,

    每个app都可以有自己的static文件夹(包含css和js文件夹)

   ?? HTML页面引入外部资源两种方式

    ①cdn              ②本地

    这时候如果我们在浏览器中访问本地服务端的时候,你会发现你所设置的

    css,js样式并没有生效(虽然你一顿操作猛如虎,此刻也是黑人问号脸)

    这是因为服务端用的本地的时候,客户端是访问不到的

    客户端在访问的时候静态文件夹路由会变成127.0.0.1/8080/mydjango/static

    而你的静态文件夹路径可能是D:\\mydjango\\static,那么结果可想而知。

    为了让客户端能访问到静态文件(比如本地导入的Bootstrap等),

    我们需要修改Django的settings.py:

    1.找到 settings.py,最下面

      技术图片

    2. 在其下面添加STATICFILES_DIRS = [],里面存放静态文件夹的路径。    

      STATICFILES_DIRS = [
          os.path.join(BASE_DIR,static)
      ]

    注意: 

      技术图片
 # /xxx/ 这是接口前缀,跟你的静态文件夹的名字一点关系都没有
  它规定了你HTML界面导入静态文件的路径前缀
  /名字/ 这个名字可以随意取,,默认情况下这个前缀跟静态文件夹名字一样!!!
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,static)
    ]
    # 暴露给外界能够访问服务器静态文件夹下面所有的资源


STATIC_URL = /xxx/  # 接口前缀 跟你的静态文件夹的名字一点关系都没有
# 默认情况下这个前缀跟静态文件夹名字一样!!!
# 静态文件配置(静态文件夹路径,可以有多个,因为每个app也可以有自己的static文件夹)

STATICFILES_DIRS = [
os.path.join(BASE_DIR,static),  # 就是你的静态文件夹路径
    os.path.join(BASE_DIR,static1),
    os.path.join(BASE_DIR,static2)
]
# ps:浏览器访问时会依次查找列表中所有的静态文件路径 
   找到的话立刻停止,都没有找到返回404
配置静态文件夹的注意事项

     3. 修改HTML文件中导入静态文件的路径,路径开头都换成接口前缀,

      后面跟static文件下你要导入的文件的相对路径即可。

     技术图片

? 补充:

 form表单提交数据的方式

   ?? form表达提交数据的两种方式

      方式一:submit

          <input type="submit">

        方式二:button按钮

          <button>button</button>

   ?? form提交数据的地址如何指定及方式?

      指定:action属性控制提交的地址

      方式

        1:全路径

          <form action="http://127.0.0.1:8000/login/">

        2:只写路径后缀(浏览器会自动拿当前页面的host、ip帮你补全路径)

          <form action="/login/">

        3:不写(默认往当前路径提交)

     注意:form表单默认是GET请求,当用户向后端提交form表单数据时,

        我们需要通过method属性将其改为POST。

      

        <form action="/login/" method=‘POST‘>

      单单这样还不够,为了POST请求不报错,我们需要先将Django的

      settings.py中注释掉一个中间件。

      技术图片

    

 后端如何获取前端的数据

    当后端接收到前端传来的请求时,要先判断具体的请求方式,

    判断浏览器是单纯想获取页面信息还是有数据提交给后端

    根据客户端请求方式的不同执行不同的逻辑代码

    如何判断请求方式

      request.method

        以登录为例使用request.method判断请求方式:

      技术图片request.method

 

 

 

 

 

? django实现登录功能

 

 

 

def login(request):

    # 获取用户端提交的请求方式

    print(request.method)  # 拿到的请求方式是全大写的字符串

    # if request.method == ‘GET‘:

    #     return render(request,‘login.html‘)

    # elif request.method == ‘POST‘:

    #     return HttpResponse("收到了 老弟")

    if request.method == ‘POST‘:

        print(request.POST)  # 你就把它当成一个大字典里面存放了客户端post提交的所有的数据

        # request.POST:< QueryDict: ‘username‘: [‘jason‘], ‘password‘: [‘123‘] >

        print(request.POST.get(‘username‘))  # value虽然是个列表但是获取value的时候拿到却是单个元素

        # 默认只会取value列表里面的最后一个元素

# request.POST:<QueryDict: ‘username‘: [‘jason‘, ‘egon‘], ‘password‘: [‘123‘]>

        print(request.POST.getlist(‘username‘))  # 要想一次性获取value列表里面所有的数据需要用getlist()

        # [‘jason‘, ‘egon‘]

print(request.POST[‘password‘])  # 不推荐使用该方法获取数据

        return HttpResponse(‘OK‘)

    return render(request,‘login.html‘)

 

获取value列表里面所有的元素需要使用getlist  应用场景:用户的爱好 多选框

get只会获取到value列表的最后一个元素

 

 

 

print(request.GET)  # <QueryDict: ‘username‘: [‘jason‘], ‘password‘: [‘123‘]>

    request.GET.get(‘user‘)  

# <QueryDict: ‘username‘: [‘jason‘,‘egon‘], ‘password‘: [‘123‘]>

request.GET.getlist(‘username‘)

 

 

 

django连接数据库

1.需要修改配置文件

DATABASES =

‘default‘:

‘ENGINE‘: ‘django.db.backends.mysql‘,

‘NAME‘: ‘day54‘,

‘HOST‘:‘127.0.0.1‘,

‘PORT‘:3306,

‘USER‘:‘root‘,

‘PASSWORD‘:‘123‘

ps:键必须都是大写

 

2.告诉django用pymysql替换它默认mysqldb模块连接数据库

方式1:在你的项目文件夹下面的__init__.py

方式2:也可以在你的应用文件夹下面的__init__.py

 

# 固定写法

import pymysql

pymysql.install_as_MySQLdb()  # 告诉django用pymysql代替mysqldb连接数据库

 

 

什么是ORM?

对象关系映射

类》》》  表

对象   》》》  表记录

对象的属性  》》》 一条记录某个字段对应的值

 

 

django的orm不能够自动帮你创建库,但是可以自动帮你创建表

 

提示:一个django项目就使用一个库,不要多个django项目使用一个库

 

 

 

 

 

 

数据库迁移(同步)命令(******)

python3 manage.py makemigrations  将你的数据库变动记录到一个小本本上(并不会帮你创建表)

python3 manage.py migrate         将你的数据库变动正在同步到数据库中

 

 

 

 

 

新增数据

# 操作数据库user表插入数据

# 方式1:

user_obj = models.User.objects.create(name=username,password=password)

# 方式2:

user_obj = models.User(name=username,password=password)

user_obj.save()  # 对象调用save方法保存到数据库

 

 

查询数据

 

user_list = models.User.objects.all()  # 获取user表所有的数据

# 只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句

print(user_list.query) 

 

 

 

利用a标签href属性 可以指定页面跳转的路径  href可以写全路径 但是推荐写后缀即可

<a href="/reg/" class="btn btn-success">添加数据</a>

# 注意 路径的书写一定要加斜杠

 

重定向  可以写别人的网址也可以是自己的路径

return redirect(‘/userlist‘)

return redirect(‘/userlist/‘)

 

 

 

queryset对象支持索引取值 但是不推荐你使用  推荐使用自带的.first()帮你获取第一条数据

 

 

删除

models.User.objects.filter(id=1).delete()  # 会将queryset所有的数据对象全部删除

 

 

 

 

查询数据需要注意的是你获取到的到底是一个queryset还是一个数据对象

user_query = models.User.objects.filter(id=edit_id).first()  # 如果你是要获取数据对象first千万别忘了

# filter当条件不存在的情况下会返回一个空的queryset对象

<QuerySet []> <class ‘django.db.models.query.QuerySet‘>

 

user_obj = models.User.objects.get(id=edit_id)  # 用get可以直接获取到数据对象本身但是查询条件不存在的情况下直接报错

 

 

 

 

编辑

编辑对象的id的获取方式

方式1:利用input隐藏一个标签

<input type="hidden" name="edit_id" value=" user_obj.pk ">

方式2:

<form action="/edit/?edit_id= user_obj.pk " method="post">

 

注意:queryset对象点修改 删除 会作用于对象内部所有的数据对象  类似于批量操作

方式1:

models.User.objects.filter(id=edit_id).update(name=username,password=password)

方式2:获取到当前数据对象

user_obj = models.User.objects.filter(id=edit_id).first()

user_obj.name = username

user_obj.save()

 

 

 

修改模型层里面的跟表相关的所有的数据,只要你修改了就必须重新执行数据库迁移命令

python manage.py makemigrations     记录到小本本上

python manage.py migrate真正操作数据库

 

 

 

 

 

 

django请求生命周期

 

 

 

图书管理系统表设计

书籍表

 

 

作者

 

 

出版社

 

外键字段名 orm会自动在字段名后面加_id.无论你的字段名有没有_id

 

 

 

 

 

端午作业

先整理今天的笔记与博客

用户的增删该查

尽最大努力完成图书管理系统

起码给我展示图书 作者 出版社信息

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ps:视图函数必须返回一个HttpResponse对象

 

 

 


 

 

 

 

 













(*?ω?)

---恢复内容结束---

---恢复内容结束---

django第二天创建django项目

创建Django项目一旦装完之后Script文件夹下面稳增加两个django-admin.exe和django-admin.py两个文件咱要创建项目就要用django-admin.exe这个文件创建1、模块安装  1、---  2、---  3、---2、cmd中创建项目的时候,想在哪里创建先切到对... 查看详情

第5篇-java面向对象ⅰ

...象面向君,不负代码不负卿初学心得:代码虐我千百遍,我待代码如初恋(笔者:JEEP/711)[JAVA笔记|时间:2017-04-03|JAVA面向对象Ⅰ]1.JAVA作为一种面向对象语言,具有以下基本概念:●多态 ●继承 ●封装 ●抽象 ●类 ... 查看详情

Django TodayArchiveView 显示第二天的日期

】DjangoTodayArchiveView显示第二天的日期【英文标题】:DjangoTodayArchiveViewshowingthedatefornextday【发布时间】:2014-03-1500:23:20【问题描述】:我只是按照django网站上的说明进行操作https://docs.djangoproject.com/en/dev/ref/class-based-views/generic-date-... 查看详情

java示例代码_在日历上设定一些日期。一周中的第二天

java示例代码_在日历上设定一些日期。一周中的第二天 查看详情

气流:如何安排一天从工作日的第二天开始?

】气流:如何安排一天从工作日的第二天开始?【英文标题】:Airflow:howtoscheduleadagtostartthedayfollowingaweekday?【发布时间】:2018-09-2009:18:34【问题描述】:如何安排dag有一个工作日的执行日期,但有一个第二天的开始日期,这不一... 查看详情

软件工程的第二天贪吃蛇

2017*********7023董玉林https://gitee.com/kbfei/retro_snaker/tree/master我改变了一下背景颜色和文字颜色还有分数的提示在以前学习python的时候有些吃力,要继续努力学习代码,多敲敲。 查看详情

梦想成为“老板”的第二天

真难,发现淘宝不只是策划难,争取到流量更难,说白就是把别人的钱装进自己口袋里更难。努力我相信每天只要有进账就可以啦!今天一天整个在写一个淘宝店铺策划,如何成功开起来一个店铺这周先运营策划方案写出来,下... 查看详情

检索未包含在 CoreData 请求结果中的第二天

】检索未包含在CoreData请求结果中的第二天【英文标题】:RetrievethenextdaynotincludedinaCoreDatarequestresult【发布时间】:2014-06-0210:05:09【问题描述】:我想通过从今天开始搜索并排除核心数据请求提供的日期来获得下一个可用日期。... 查看详情

开始学习python的第二天(代码片段)

一、练习题1.使用while循环输入1234568910#第一种方法count=0whilecount<10:count+=1#count=count+1ifcount==7:print(‘‘)else:print(count)#第二种count=0whilecount<10:count+=1#count=count+1ifcount==7:continueprint(count)2. 查看详情

60django第二天功能(代码片段)

一、静态文件配置1.1、静态文件  静态文件指的是已经写好的文件,可以直接使用的。例如:js文件、css文件、图片文件、第三方库文件等等1.2、静态文件的存放  HTML存放在templates文件夹下面  静态文件存放在static文件夹... 查看详情

学习vue的第二天

距离上次学习vue已经很长时间了 最近手头上一直有点别的事  还有一个原因是最近有点懒惰所以没有学习 自我批评一下  今天抽空学习了一下Vue主要是事件处理 学的也不怎么样主要是为了自己记录一下... 查看详情

快放弃的第二天手动微笑

循环while条件:     代码块(循环体)whileTrue   死循环    print(“123123123”)    break 彻底停止当前本层循环    continue停止当前循环,继续执行下一次循环。    exit:彻底退出程序els... 查看详情

认识css的第二天(代码片段)

ul去除自带的样式     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>ullist-style-type:none;padding-left:0;</style></he 查看详情

自己写博客的第二天

文件和目录cd:是ChangeDirectory的缩写,用来切换工作目录,语法:cd[相对或绝对路径或特殊符号]cd:进入该用户的主目录~(root用户为/root,其他用户为/home/用户名)cd..:返回上一级目录(注意要空格)cd-:返回上次所在目录cd/:返... 查看详情

duang!!!为什么函数能够返回unique_ptr

C++虐我千百遍,我待C++如初恋从智能指针说起对高手而言。指针是上天入地的神器。对新手而言,那简直是灾难的源泉。高级语言如Java,C#都自己主动管理内存。你仅仅管new。不必担心内存释放问题。BjarneStroustrupC觉... 查看详情

flink获取第二天的0点时间(代码片段)

获取格林威治标准时间的第二天00:00:00即获取北京时间的第二天08:00:00valts=(ctx.timerService().currentProcessingTime()/(1000*60*60*24)+1)*(1000*60*60*24)获取北京时间的第二天00:00:00valts=(ctx.timerService().currentProcessingTi 查看详情

[git]继续学习的第二天

     进一步认识git分支操作。     首先是HEAD引用。一般HEAD引用指向的是当前分支,但有时候需要从某一历史版本开始新的分支,这时候就需要移动HEAD引用,命令与移动分支节点一样是gitchecko... 查看详情

鸟叔的私房菜的第二天

touch:1、建立一个新档案     2、将某个档案日期修订为目前(mtime和atime)文件的accesstime,atime是在读取文件或者执行文件时更改的。文件的modifiedtime,mtime是在写入文件时随文件内容的更改而更改的。文件的createti... 查看详情