django 学习笔记【2023-10-16】

1.创建django项目

视频教学资源[www.bilibili.com/video/BV1mj...]

1.1 命令行创建

bash 复制代码
django-admin.exe startproject djpr01

1.2 pycharm创建

直接选择项目类型为django,选择解释器即可!

1.3 区别

  • 命令行创建的是标准的项目

  • pycharm创建的,在标准的基础上加了点东西。

    • 创建了一个templates目录(可删除)
    • 在setting中加了:'DIRS': [BASE_DIR / 'templates'],删掉。

2.项目文件

bash 复制代码
├─djangoProject
│  │  manage.py		【项目管理、启动、创建app、数据管理等】【不用修改】
│  └─djangoProject		【与项目名同名的文件夹】
│          asgi.py		【接收网络请求】【异步】【不用修改】
│          settings.py	【配置文件】【经常修改】
│          urls.py		【路径-函数对应关系】【经常修改】
│          wsgi.py		【接收网络请求】【同步】【不用修改】
│          __init__.py

3.APP

1.项目

  • app, 用户管理【表结构、函数、html、css】

  • app,订单管理

  • app,后台管理

  • app,网站

  • app,api

  • ...

一般一个项目创建一个app。

2.app创建

bash 复制代码
python manage.py startapp app01

3.文件介绍

bash 复制代码
├─app01
│  │  admin.py		【不需要修改】【django默认提供的后台管理】
│  │  apps.py		【不需要修改】【app启动类】
│  │  models.py		【数据库操作】
│  │  tests.py		【不需要修改】【单元测试】
│  │  views.py		【urls.py->视图】
│  │  __init__.py
│  └─migrations		【不需要修改】【数据库变更记录】
│          __init__.py

4.quickstart

4.1 确保app已注册

在setttings.py中添加【app01-apps.py】中的App01Config类,这样就可以找到了。

arduino 复制代码
    'app01.apps.App01Config'

4.2 url和视图函数对应关系

修改urls.py

  • 注释掉默认的url

  • 添加自定义url

python 复制代码
urlpatterns = [
    # path('admin/', admin.site.urls),
    path('index/', views.index),
]
  • 修改views.py

    python 复制代码
    from django.shortcuts import HttpResponse
    
    
    # Create your views here.
    
    def index(request):
        return HttpResponse("Welcome.")

    4.3 启动django项目

    4.3.1 命令行启动

    bash 复制代码
    python manage runserver

    4.3.2 pycharm启动

    点运行,也可以配置参数运行。

    bash 复制代码
    I:\miniconda3\envs\django42\python.exe C:\Users\jianj\PycharmProjects\djangoProject\manage.py runserver 8000 
    Watching for file changes with StatReloader
    Performing system checks...
    
    System check identified no issues (0 silenced).
    
    You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
    Run 'python manage.py migrate' to apply them.
    October 15, 2023 - 18:46:00
    Django version 4.2.6, using settings 'djangoProject.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CTRL-BREAK.

    启动成功!

5.添加页码

5.1.urls.py创建关系

python 复制代码
    path('user/list', views.user_list),
    path('user/add', views.user_add),

5.2 views.py创建函数页面

python 复制代码
def user_list(request):
    return HttpResponse("user list.")

def user_add(request):
    return HttpResponse("user add.")

6.templates模板

6.1 修改views.py

  • 使用render(request, "html模板文件.html...")

    python 复制代码
    def user_list(request):
        # return HttpResponse("user list.")
        # 读取html文件
        # 默认在templates
        return render(request, "user_list.html")

6.2 创建template

app01--template--user_list.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>User List</h1>
</body>
</html>

6.3 注意事项

  • 默认在templates

  • 在templates目录下查找user_list.html【根据app注册顺序逐一查找】

  • 如果在dirs中添加

    lua 复制代码
     'DIRS':[os.path.join(BASE_DIR, 'templates')],

    则优先在根目录查找templates,如果找不到再去app下找(根据app注册顺序)。

6.4 静态文件

  • 图片

  • css

  • js

主要步骤如下:

  • 在对应app目录下创建static文件夹

  • 在html中引用到位,例如 "/static/1.jpg"

  • 一般在static下新建css\js\img\plugins目录,存放不同的静态资源

页面动态{% load static %}写法:

html 复制代码
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.min.css' %}">
</head>
<body>
    <h1>User List</h1>
    <img src="{% static 'img/1.jpg' %}"/>
    <script src="{% static 'js/jquery/jquery.min.js' %}"></script>
    <script src="{% static 'js/bootstrap/bootstrap.min.js' %}"></script>
</body>
</html>

7.模板语法

html中的占位符,用数据进行替换。

7.1 参数

views中

python 复制代码
def tpl(request):
    # return HttpResponse("user add.")
    name = "韩梅梅"

    return render(request, "tpl.html", {"n1": name})

tpl中

7.2 页面

html 复制代码
<div>{{ n1 }}</div>

这样即可获取传来的变量

  • 列表
  • 字典
  • 字典列表
  • 循环
  • if判断

7.3 其他

html 复制代码
<h1>模板语法学习</h1>
<h2>1.取单值</h2>
<div>{{ n1 }}</div>
<h2>2.数组</h2>
<div>{{ n2 }}</div>
<div>{{ n2.0 }}</div>
<div>{{ n2.1 }}</div>
<div>{{ n2.2 }}</div>
<h2>3.循环取值</h2>
<div>
    {% for item in n2 %}
        <span>{{ item }}</span>
    {% endfor %}
</div>
<h2>4.字典</h2>
{{ n3 }}
{{ n3.name }}
{{ n3.salary }}
{{ n3.role }}
<h2>5.字典循环</h2>
{% for k,v  in n3.items %}
    <li>{{ k }}= {{ v }}</li>
{% endfor %}
<h2>6.字典列表</h2>
{{ n4.0 }}
{% for item in n4 %}
    <div>{{ item.name }} {{ item.salary }}</div>
{% endfor %}
<h2>7.条件语句</h2>
{% if n1 == "韩梅梅" %}
    <h1>韩梅梅好厉害</h1>
{% elif n1 != "abc" %}
    <h1>我好厉害</h1>
{% else %}
        <h1>我好厉害</h1>
{% endif %}

8.新闻爬取和展示

8.1 views.py

python 复制代码
def news(request):
    # return HttpResponse("user add.")
    # "http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2023/10/news"
    import requests
    url = "http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2023/10/news"
    # 必须加header,不然会被墙
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    res = requests.get(url, headers=headers)
    # print(res.text)
    data_list = res.json()
    # print(data_list)
    return render(request, "news.html", {"data_list": data_list})

8.2 news.html

html 复制代码
<ul>
    {% for item in data_list %}
        <li>{{ item.news_title }} 时间:{{ item.post_time }}  链接:http://www.chinaunicom.com.cn{{ item.news_link }}</li>
    {% endfor %}
</ul>

8.3 urls.py

python 复制代码
 path('news', views.news),

8.4 返回的几种方式

python 复制代码
def something(request):
    # request是对象,封装了用户通过浏览器发送过来的所有数据
    # 1.获取用户请求方式
    print(request.method)

    # 2.url传值
    print(request.GET)
    # http://127.0.0.1:8000/something?n1=okokokokok
    # < QueryDict: {'n1': ['okokokokok']} >

    # 3.在请求中提交数据
    print(request.POST)

    # 4.返回文本
    # return HttpResponse("Welcome.")

    # 5.返回html
    # return render(request, "something.html", {"title": "我来了"})

    # 6.返回redirect
    return redirect("https://www.baidu.com")

常见的3种请求,3种响应。

9.用户登录

CSRF(Cross-Site Request Forgery),也被称为one-click attack或者session riding,即跨站请求伪造攻击。

攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等1。

10.学习物料

【金山文档】 django www.kdocs.cn/folder/chdQ...

相关推荐
LuminescenceJ6 分钟前
GoEdge 开源CDN 架构设计与工作原理分析
分布式·后端·网络协议·网络安全·rpc·开源·信息与通信
Tony Bai7 分钟前
【分布式系统】11 理论的试金石:用 Go 从零实现一个迷你 Raft 共识
开发语言·后端·golang
短剑重铸之日28 分钟前
《SpringCloud实用版》统一认证授权:Spring Authorization Server + OAuth2 + JWT 生产级方案
java·后端·spring·jwt·oauth2
浮尘笔记1 小时前
Go语言并发安全字典:sync.Map的使用与实现
开发语言·后端·golang
淡泊if1 小时前
RESTful API设计标准:单体 vs 微服务的最佳实践
后端·微服务·restful
金牌归来发现妻女流落街头1 小时前
【Spring Boot注解】
后端·springboot
无心水1 小时前
数据库字符串类型详解:VARCHAR、VARCHAR2、CHARACTER VARYING的区别与选择指南
数据库·后端·varchar·varchar2·character·字符串类型·2025博客之星
郑州光合科技余经理2 小时前
同城配送调度系统实战:JAVA微服务
java·开发语言·前端·后端·微服务·中间件·php
Dontla2 小时前
GraphQL介绍(声明式查询)文件上传GraphQL文件上传
后端·graphql
还在忙碌的吴小二2 小时前
Go-View 数据可视化大屏使用手册
开发语言·后端·信息可视化·golang