Django学习(一):入门基础

参考:最新Python的web开发全家桶(django+前端+数据库)

1. Django安装

pip install django

安装完成后,在python文件夹中将会多出两个部分

F:\Python39
	- python.exe
	- Scripts
		- pip.exe
		- django-admin.exe 【创建django项目的工具】
    - Lib
    	- 内置模块
		- site-packages
			- openpyxl
			- python-docx
			- …
			- django 【框架的源码】

2. 创建项目

Django中的项目会有一些默认的文件与文件夹,创建此以开始构建Django项目

2.1 以命令行方式创建

  • 第一步,打开终端

  • 第二步,进入项目目标目录(想把项目放在哪里就进入哪个目录)

  • 命令行执行命令

    (若未加入环境变量,可能需要补全路径) django-admin startproject 项目名
    

2.2 Pycharm方式创建

需要pycharm专业版

  • 在pycharm中新建项目,选择新建Django项目,注意,解释器需要选择安装Django完毕的解释器

Django学习(一):入门基础_第1张图片

!!!注意,不要把Django项目目录和python安装目录放到一起,不然全乱了,想要更改Django项目把Python搞崩就不好了

2.3 Django项目的基本文件结构

命令行创建的是标准的文件结构,但是Pycharm创建的项目,会多一些东西

  1. 多创建一个template目录
  2. settings.py中,多了一行

Django学习(一):入门基础_第2张图片

文件基本结构
mysite
├── db.sqlite3
├── manage.py			# 项目的管理,包括: 启动项目,创建app, 数据管理 【常用】
└── mysite
    ├── __init__.py
    ├── asgi.py			# 接收网络请求 (异步)                【不用动】
    ├── settings.py		# 项目配置(模板配置,数据库配置,注册app) 【常操作】
    ├── urls.py			# url和函数的对应关系                 【常操作】
    └── wsgi.py			# 接收网络请求 (同步)                【不用动】

3. APP 的创建和说明

APP —— 可以看作功能模块

- 项目
	- app1 【用户管理】
	- app2 【后台管理】
	- app3 【网站】
	- app4 【API】 
	- ...

每个APP都可以有独立的表结构、函数、CSS和HTML框架

创建APP

在激活解释器环境后,在Django项目目录下,执行

python manage.py startapp 应用名

即可创建一个app

例子:

(venv) F:\Django Project\mysite>python manage.py startapp app01

文件结构

|—— app01
|	|—— __init__.py
|	|—— admin.py            【固定,不用动】django默认提供了admin后台管理
|	|—— apps.py				【固定,不用动】app启动类
|	|—— migration			【固定,不用动】数据库变更记录
|	|—— models.py			【**重要**】对数据库操作
|	|—— tests.py			【重要,不用动】单元ces
|	|—— views.py			【**重要**】函数
|
|—— manage.py
|—— mysite
    ├── __init__.py
    ├── asgi.py			
    ├── settings.py		
    ├── urls.py				【URL->函数】
    └── wsgi.py			

4. 快速上手

4.1 注册APP

在项目同名文件夹下的 【settings.py】 文件中找到 INSTALLED_APPS ,添加应用配置类

例如:

Django学习(一):入门基础_第3张图片

4.2 编写URL和视图函数对应关系

在项目同名文件夹下的 【urls.py】文件中找到 urlpatterns,引入应用视图,添加路径函数映射

path('路径名','映射函数名')

例子:

Django学习(一):入门基础_第4张图片

4.3 编写视图函数

在应用 【views.py】文件中,编写刚才在 url.py 中声明的函数

Django学习(一):入门基础_第5张图片

4.4 启动Django项目

命令行启动

在项目路径下,执行

python manage.py runsever

Pycharm启动

Django学习(一):入门基础_第6张图片

之后即可访问目标网址

在这里插入图片描述

4.5 再写一个页面

urls.py】创建关系 -> 【views.py】实现函数

Django学习(一):入门基础_第7张图片

Django学习(一):入门基础_第8张图片

4.6 template模板

views.py的函数不仅仅可以返回字符串,还可以返回html文件

【views.py】导入render,使用函数

render(request,"html文件名")

而项目会自动找到【templates】目录,找到需要访问的html文件

例子:

Django学习(一):入门基础_第9张图片

Django学习(一):入门基础_第10张图片

注意】这里找文件的方式不是只找自己app目录下的templates文件夹,而是按照在【seetings.py】中注册的app的顺序一个一个的访问templates文件夹,直到找到目标html文件

而在pycham建立django项目时,在根目录自动创建的templates文件夹和settings.py中填加的

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

则会使系统优先去根目录下templates文件夹寻找,没有找到再逐一询问各个app的templates文件夹

4.7 静态文件

在开发过程中,一般将图片、CSS、JS文件和插件等文件都当作静态文件处理

每个APP使用的静态文件必须放在自己目录下的【static】文件夹中

4.7.1 创建static目录

比较好的文件结构(分类存放)

- app01
	- ...
	- ...
	- static
		- img
		- css
		- js
		- plugins
		- ...
	- ...

以上目录需要自己创建

4.7.2 使用静态资源

在页面html文件中,推荐使用

{% load static %}                  【导入静态文件路径】
src ={% static 相对路径 %}		【获取资源】

的方法,便于后期静态文件的迁移与维护(静态文件改位置了,在【settings.py】中改一下 [ STATIC_URL ] 就可以,如果是绝对路径会非常麻烦)

例子

Django学习(一):入门基础_第11张图片

5. 模板语法

本质:在HTML中写一些占位符,由数据对这些占位符进行替换和处理

示例

  1. 在【urls.py】中,建立url与函数映射
## urls.py

urlpatterns = [
    #path('admin/', admin.site.urls),


    # www.xxx.com/index -> 执行函数
    path('index/', views.index),
    # path(路径名,映射函数名)

    path('user/list/', views.user_list),

    path('tpl', views.tpl),
]

  1. 在【views.py】中,可以获取或声明变量,以 render() 函数参数的形式传递到html文件,这里以单值、列表、字典和字典列表为例
## views.py
def tpl(request):

    name = "王大壮"
    roles = ["管理员","CEO","保安"]
    user_info = {"name":"二狗","salary":10000,"role":"CTO"}
    data_list = [
        {"name":"唐三才","salary":19000,"role":"CEO"},
        {"name": "赵四", "salary": 9000, "role": "manager"},
        {"name": "伍员", "salary": 10000, "role": "CFO"}
    ]

    return render(request,"tpl.html",{"n1":name,"n2":roles,"n3":user_info,"n4":data_list})
                                    # 以字典形式传递参数

  1. 在html文件中,以花括号形式解析传入变量

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
    <h1>模板语法的学习h1>

    <div>{{ n1 }}div>  
    <div>{{ n2 }}div>  
    <div>{{ n2.0 }}div>  
    <div>{{ n2.1 }}div>
    <div>{{ n2.2 }}div>

    <div>
        {% for item in n2 %}   
            <span>{{ item }} span>
        {% endfor %}
    div>

    <hr/>
    <div>{{ n3 }}div>  
    <div>{{ n3.name }}div>  
    <div>{{ n3.salary }}div>
    <div>{{ n3.role }}div>

    <ul>
        {% for k,v in n3.items %}   
            <li>{{ k }}  = {{ v }}li>
        {% endfor %}
    ul>

    <hr/>
    <div>{{ n4 }}div>  
    <div>{{ n4.0 }}div>  
    <div>{{ n4.1.name }}div> 
    <div>{{ n4.2.role }}div>

    <ul>
        {% for item in n4 %}   
            <div>{{ item.name }},{{ item.role }},{{ item.salary }}div>
        {% endfor %}
    ul>

    <hr/>
    {% if n1 == "王大壮" %} 
        <h1>666666h1>
    {% elif n1 == "二狗" %}
        <h1>你怎么穿着大壮的衣服?h1>
    {% else %}
        <h1>欸?h1>
    {% endif %}

body>
html>

运行查看结果

Django学习(一):入门基础_第12张图片

【注意】模板语法是Django开发的,页面呈现顺序应该是:

Django学习(一):入门基础_第13张图片

用户浏览器中不可能看到模板语法的,其只会解析到标准的HTML语句

Django学习(一):入门基础_第14张图片

6.请求和响应

三种请求和响应方式

#【urls.py】

urlpatterns = [
    path('something/', views.something),
]

#【views.py】
def something(request):
    #request 是一个对象,封装了用户发过来的所有请求相关数据

    #1. 获取请求方式 GET/POST
    print(request.method)

    #2. 在URL上传递一些值 (用户可以在浏览器地址栏进行输入,如:http://127.0.0.1:8000/something/?n1=123&n2=999)
    print(request.GET)

    #3. 在请求体中提交数据(请求体中的请求表面看不到)
    print(request.POST)

    #4. 【响应】HttpResponse("返回内容"),返回字符串给请求者
    #return HttpResponse("返回内容")

    #5. 【响应】render读取html的内容并进行渲染
    #return render(request,"something.html",{'title':"来了"})

    #6.【响应】重定向到其他页面(浏览器按照给出的链接,自行访问)
    return redirect("https:www.baidu.com")

7.实例应用:用户登录页面

代码

#【urls.py】

urlpatterns = [
    #用户登录
    path('login/', views.login),
]

#【views.py】
def login(request):
    # 根据请求方式返回不同的数据
    if request.method == "GET":
        return render(request, "login.html")
    else:
        #print(request.POST)
        user_name = request.POST.get("user")
        password = request.POST.get("pwd")

        if user_name == "root" and password == "123": #通过返回的数据进行判断
            return redirect("https:www.baidu.com")
        else:
            return render(request, "login.html",{"error_msg":"用户名或密码错误"}) #向页面传递错误信息

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录title>
head>
<body>
    <h1>用户登录h1>
    <form method="post" action="/login/">

        {% csrf_token %} 

        <input type="text" name="user" placeholder="用户名">
        <input type="password" name="pwd" placeholder="密码">
        <input type="submit" value="提交"> <span style="color:red">{{ error_msg }}span>

    form>
body>
html>

【注意】:由于django的安全机制,只有在表单中加入

{% csrf_token %}

才可正确传输数据

效果

输入正确账号密码:跳转到百度

输入错误账号密码:重新跳转到本页面,并红色提示账号或密码错误

Django学习(一):入门基础_第15张图片

你可能感兴趣的:(后端,django,学习,python)