IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python django 安装虚拟环境创建工程项目 -> 正文阅读

[Python知识库]python django 安装虚拟环境创建工程项目

django 中的三层架构:视图(控制层),数据模型,模板(视图层)
客户端浏览器发送请求 ——> 视图(接收请求,业务处理) ——> 数据模型 ——> 数据库 ——> 数据模型 ——> 视图 ——> 模板 ——> 视图 ——> 客户端

已经安装好了 python ,检查方法:输入 python 显示版本信息。

?1、在桌面新建一个文件夹例如:dj_base.

2、进去该文件夹输入命令安装虚拟环境:C:\Users\Administrator\Desktop>?python -m venv dj_base? ?成功以后文件夹里面便会有一下文件。

?3、激活 输入命令?cd dj_base/Scripts/activate? 激活之后便会看见,前面多了 (dj_base)

?4、安装 django 本次安装版本 2.2.5,选择国内的镜像

(dj_base) C:\Users\Administrator\Desktop>pip install django==2.2.5 -i https://pypi.douban.com/simple

?5、检查安装结果,import django? ?django.__version__ 可以查看到版本。

?6、创建一个项目名称为:?bookmanager

(dj_base) C:\Users\Administrator\Desktop>django-admin startproject bookmanager

在桌面出现项目文件夹

?工程总目录与内部文件夹的名称是一样的,都是 bookmanager

????????manage.py ????????python可执行文件:内置一些django的命令

关于项目内部bookmanager文件夹中的文件说明:

__init__.py ????????当前文件夹是一个模块

settings.py????????django中的配置文件 例如:数据库、缓存、中间件、语言等

urls.py????????路由文件:大家在访问网站时使用的网址

wsgi.py????????网关系统:在互联网中可以被其他计算机访问的文件

7、运行该项目,进入工程总目录下输入命令?python manage.py runserver

?打开网址:http://127.0.0.1:8000/

?Django的基础命令

1.django-admin startproject 项目名:创建一个django项目

2.python manage.py startapp 应用名:项目中创建一个应用

3.python manage.py shell:进入调试代码的调试模式

4.python manage.py makemigrations:数据库创建更改文件

5.python manage.py migrate:同步到数据库进行更新

6.python manage.py flush:清空数据库

7.python manage.py runserver 0.0.0.0:8000:启动开发服务器(内置的单线程具有阻塞特性的服务器它不能支持高并发,只是用作测试,在实际工作中严令禁止通过开发服务器部署项目)

8.python manage.py 回车:可查看更多命令

二、创建项目子应用

1、创建子应用:python manage.py startapp + 应用名

例如:python manage.py startapp index

?创建成功如图:

?

?admin.py????????文件跟网站的后台管理站点配置相关。

apps.py????????文件用于配置当前子应用的相关信息。

migrations????????目录用于存放数据库迁移历史文件·

models.py????????文件用户保存数据库模型类。

tests.py????????文件用于开发测试用例,编写单元测试。

views.py????????文件用于编写Web应用视图。

2、用 pycharm? 打开项目文件夹,setting 中?配置环境,可点击 “ +? ”号选择环境目录文件,我们这里的文件目录为:C:\Users\Administrator\Desktop\dj_base\Scripts\python.exe

??3、注册子应用 index

?settings.py 说明

# 返回一个项目的绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 数据加密 防止网站跨域攻击
SECRET_KEY = 'd5tsvvss^(&_jgvdo3lf_2_&pvs=3j(55d3oug&#t5y*-i^+(%'
# 让网站处于开发模式
DEBUG = True
# 允许访问网站的白名单,例如写上 ip 地址,或者允许所有的访问 写上通配符: ’*‘
ALLOWED_HOSTS = []
# 子应用注册(新创建的子应用要在这里注册)
INSTALLED_APPS = []
# 中间件
MIDDLEWARE = []
# 网站入口根路由配置
ROOT_URLCONF = 'bookmanager.urls'
# 配置 html 静态文件
TEMPLATES = []
# 配置开发服务器
WSGI_APPLICATION = 'bookmanager.wsgi.application'
# 配置数据库
DATABASES = {}
# 用户密码加密
AUTH_PASSWORD_VALIDATORS = []
# 网站默认语言
LANGUAGE_CODE = 'zh-hans'
# 网站的默认时间
TIME_ZONE = 'Asia/Shanghai'

4、在子应用的 views.py 创建一个函数

from django.http import HttpResponse
def hello(request):
    return HttpResponse('hello django')

5、在子应用 index 文件夹下创建子路由文件 urls.py ,因为项目可能比较大,一般不去动根路由。

from django.urls import path
from .views import hello  # 导入视图函数
urlpatterns = [
    path('',hello),
]

6、在根路由中导入子路由

from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('index.urls')) # 导入子路由
]

7、运行该项目,效果如下:

?三、url 传参

第一种:

1、新建一个子应用 urlPassValue,创建子应用的方法同上。

2、编辑视图 views.py

from django.http import HttpResponse
# Create your views here.
def urlpassvalue(request):
    name = request.GET.get('name','')
    age = request.GET.get('age',10)
    return HttpResponse('路由传参的第一种')

3、创建子路由,新建 urls.py 文件

from django.urls import path
from .views import urlpassvalue
urlpatterns = [
    path('upv',urlpassvalue),
]

4、根路由中引入子路由

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('index.urls')),
    path('',include('urlPassValue.urls')), # 引入 url 传参示例的子应用
]

5、运行项目,打开浏览器 在网址后面输入:upv?name=guan&age=10 运行效果:

?第二种:与第一种不同的地方在

1、views.py

from django.http import HttpResponse
# Create your views here.
def urlpassvalue(request,name,age):
    return HttpResponse('路由传参的第二种')

2、urls.py

from django.urls import path
from .views import urlpassvalue
urlpatterns = [
    path('upv/<str:name>/<int:age>',urlpassvalue),
]

输入 upv/guan/10 效果:

三、views 详细介绍

1、创建一个应用?python manage.py startapp firstview

2、 views.py

def message(request):
    print(dir(request))
    return HttpResponse('request是浏览器传过来的参数')

3、在应用中创建子路由,根路由中引入子路由,setting中注册子应用此处略过,最后运行如下图所示。

3.1? ?request 中的方法:

['COOKIES', 'FILES', 'GET', 'META', 'POST', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_current_scheme_host', '_encoding', '_get_full_path', '_get_post', '_get_raw_host', '_get_scheme', '_initialize_handlers', '_load_post_and_files', '_mark_post_parse_error', '_messages', '_read_started', '_set_post', '_stream', '_upload_handlers', 'body', 'build_absolute_uri', 'close', 'content_params', 'content_type', 'csrf_processing_done', 'encoding', 'environ', 'get_full_path', 'get_full_path_info', 'get_host', 'get_port', 'get_raw_uri', 'get_signed_cookie', 'headers', 'is_ajax', 'is_secure', 'method', 'parse_file_upload', 'path', 'path_info', 'read', 'readline', 'readlines', 'resolver_match', 'scheme', 'session', 'upload_handlers', 'user', 'xreadlines']

1.request.GET????????获取url上以?形式的参数
2.request.POST????????获取post提交的数据
3.request.path ????????请求的路径,比如:127.0.0.1/test/l,那这个值就是/test/1
4.request.method ????????请求的方法比如:get post
5.request.COOKIES ????????请求过来的cookies
6.request.user ????????请求的用户对象,可以通过它判断用户是否登录,并获取用户信息
7.request.session???????? 一个既可读又可写的类似与字典的对象,表示当前会话
8.request.????????META一个标准的Python字典,包含所有的HTTP首部,具体的头部信息取决与客户端和服务器。

3.2?常用的返回对象

from django.http import HttpResponse
HttpResponse ????????可以直接返回一些字符串内容

from django.shortcuts import render
render????????将数据在模板中渲染并显示

from django.http import JsonResponse
JsonResponse ????????返回一个json类型 通常用于与前端进行ajax交互

4、通过类创建视图对象

views.py

# 通用视图
from django.views.generic import View
# 通过类创建视图
class Message(View):
    def get(self,request):
        return HttpResponse('通过类创建视图')

urls.py

from django.urls import path
from .views import Message
urlpatterns = [
    path('message/',Message.as_view())
]

运行结果:

5、小案例,获取浏览器输入的值

5.1 views.py

from django.views.generic import View
# 通过类创建视图
class Message(View):
    def get(self,request):
        name = request.GET.get('name','默认值')
        age = request.GET.get('age',10)
        return HttpResponse('My name is {}, my age is {}'.format(name,age))

5.2 urls.py

from django.urls import path
from .views import Message
urlpatterns = [
    path('message',Message.as_view())
]

?运行结果:

四:模板 template 介绍

1、创建一个子应用 template?

python manage.py startapp template

2、在根目录下新建 templates 文件夹

3、在 templates 文件夹新建一个 index.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>template</title>
</head>
<body>
<p>
    这是{{name}}的第一个 template 文件
</p>
</body>
</html>

4、编辑子视图?views.py

# 返回一个HTML页面
from django.shortcuts import render
# 通用视图
from django.views.generic import View
# 通过类创建视图
class Template(View):
    def get(self,request,name):
        return render(request,'index.html',{'name':name})

5、编辑子路由 urls.py

from django.urls import path
from .views import Template
urlpatterns = [
    path('template/<str:name>',Template.as_view())
]

6、在根路由中引入子路由

7、在setting 中注册子路由和配置静态文件

?8、运行项目输入网址 python manage.py runserver

?template 内置标签

{% for %}{% endfor %} 遍历输出的内容
{% if %}{% elif %}[% endif %}对变量进行条件判断
{% url name args %} 引用路由配置名
{% load %} 加载django的标签库
{% load static %}
{% static static_path %} 读取静态资源
{% extends base_template %} 模板继承
{% block data %}{% endblock %} 重写父模板的代码
{% csrf_token %} 跨域密钥  一般在表单(form)中使用

for 标签模板

for标签模板
forloop.counter     从1开始计算获取当前索引 
forloop.counter0     从0开始计算获取当前索引
 forloop.revcounter     索引从最大数递减到1
forloop.revcounter0     索引从最大数递减到0
forloop.first     当前元素是否是第一个
forloop.last     当前元素是否为最后一个
empty    为空的情况

4.1 模板标签举例

views.py 传一个列表

# 通过类创建视图
class Template(View):
    def get(self,request,name):
        list_data = range(10)
        return render(request,'index.html',{'name':name,'list_data':list_data})

index.html 用模板标签写循环和判断

<!--for 循环-->
    <ul>
        {% for item in list_data %}
        <li>{{ item }}--{{forloop.counter}}--{{forloop.counter0}}--{{forloop.revcounter}}</li>
<!-- if 判断-->
        {% if forloop.first %}
        this is firsr number
        {% elif forloop.last %}
        this is last number
        {% endif %}
        {% endfor %}
    </ul>

结果如下:

?图片的加载:根目录下新建 static 文件夹,再新建 image 文件夹,放入一张图片;

settings 新增配置:

# 配置静态文件
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'statics')
]

index.html 中加载这张图片?

{% load staticfiles %}
<img src="{% static 'images/测试下载1.jpg' %}" />

效果如下:

?4.3模板过滤

内置过滤器与自定义过滤器
过滤器的用处
用于在htm模板中,对于渲染过来的数据进行二次操作使用,过滤器其实就是用来处理这些数据的模板引擎中使用的函数
常用过滤器介绍
内置过滤器使用方法说明
add     给value的值加10    {{value|add:10}}
date     把日期格式按照规定的格式化显示     {{value|date:"Y-m-d H:i:s"}}
cut     将value中的xx删掉     {{value|cut:'xx'}}
capfirst     value首字母大写     {{value|capfirst}}
default     值为false时使用默认值     {{value|default:'xx'}}
default_if_none     值为空时使用默认值     {{value|default_if_none:'xx'}}
dictsort     值为字典的列表,按照key排序     {{value|dictsort:'key'}}
dictsortreversed     按照key值反序    {{value|dictsortreversed:'key'}}
first    返回列表中的第一个索引值     {{value|first}}
floatformat    保留小数点后两位    {{value|floatformat:2}}
join      类似python中的xx.join(value)     {{valueljoin:'xx'}}
last    返回列表中的最后一个索引值    {{value|last}}
length    返回值的长度    {{value|length}}
divisbleby     如果值可以被2整除即返回true     {{value|divisibleby:2}}
length_is     如果值长度为2即返回true     {{value|length_is:'2'}}
safe     将字符串中的html标签在前端安全展示     {{value|safe}}
random    随机返回列表中的一个值      {{value|random}}
slice    截取前两个字符     {{value|silce:'2'}}
slugify     值小写,单词用-分隔     {{value|slugify}}
upper    字符串大写     {{valuelupper}}
urlize    字符串中的链接可点击    {{valuelurlize}}
wordcount    字符串中的单词数    {{value|wordcount}}
timeuntil    距离当前日期的天数和小时数(未来时间)    {{value|timeunti1}}

模板使用方法例子:

创建一个子应用 templatefunc,

创建子应用的路由,在根路由中引用

views.py

from django.shortcuts import render

# Create your views here.
from django.shortcuts import render
from django.views.generic import View
import datetime
class templatefunc(View):
    def get(self,request):
        dict_data = {}
        dict_data['count'] = 10
        dict_data['time'] = datetime.datetime.now()
        dict_data['cutt'] = '删除两个字'
        dict_data['Aa'] = 'apple'
        dict_data['result'] = False
        dict_data['res'] = None
        dict_data['dict_list'] = [{'name':'jack','age':25},{'name':'bob','age':21}]
        dict_data['floatnum'] = 3.141592654
        dict_data['html_str'] = '<span style="display:block;background-color:red;width:40px;height:14px;"></span>'
        dict_data['listnum'] = range(5)
        dict_data['words'] = "百度一下 https://WWW.Baidu.com 你就知道。Baidu it and you will know."
        dict_data['fulture'] = dict_data['time'] + datetime.timedelta(days=5)
        return render(request,'templatefunc.html',dict_data)

templatefunc.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>templatefunc</title>
</head>
<body>
<h1>这是templatefunc</h1>
  <p>初始的count:{{count}}</p>
<p>count + 10:<span>&nbsp;</span>{{count|add:10}} </p>
时间:<span>&nbsp;</span>{{time}}--- {{time|date:'Y-m-d H-i-s'}}
<br>
cut: <span>&nbsp;</span>{{cutt}}--- {{cutt|cut:'两个'}}
<br>
capfirst首字母大写:<span>&nbsp;</span>{{Aa}}---{{Aa|capfirst}}
<br>
值为false 时使用默认值:<span>&nbsp;</span>{{result}}---{{result|default:'默认值'}}
<br>
值为空时使用默认值:<span>&nbsp;</span>{{res}}---{{res|default_if_none:'默认值'}}
<br>
值为字典时按照key排序:<span>&nbsp;</span> {{dict_list}}---{{dict_list|dictsort:'age'}}
<br>
按照 key 值反序:<span>&nbsp;</span> {{dict_list}}---{{dict_list|dictsortreversed:'age'}}
<br>
返回列表中的第一个索引值:<span>&nbsp;</span> {{dict_list}}---{{dict_list|first}}
<br>
保留小数点后两位:<span>&nbsp;</span>{{floatnum}}---{{floatnum|floatformat:2}}
<br>
类似python中的xx.join(value):<span>&nbsp;</span> {{Aa}}---{{Aa|join:'-'}}
<br>
返回列表中的最后一个索引值:<span>&nbsp;</span> {{dict_list}}---{{dict_list|last}}
<br>
返回值的长度:<span>&nbsp;</span>{{cutt}}---{{cutt|length}}
<br>
如果值可以被2整除返回 true:<span>&nbsp;</span> {{floatnum}}---{{floatnum|divisibleby:2}}
<br>
如果值长度为2返回 true :<span>&nbsp;</span>{{cutt}}---{{cutt|length_is:'2'}}
<br>
将字符串中的 html 标签在前端安全展示 :<span>&nbsp;</span>{{html_str}}---{{html_str|safe}}
<br>
随机返回列表中的一个值 :<span>&nbsp;</span>{{listnum}}---{{listnum|random}}
<br>
提取前两个字符串 :<span>&nbsp;</span>{{cutt}}---{{cutt|slice:'2'}}
<br>
值小写,单词用-分隔 :<span>&nbsp;</span>{{words}}---{{words|slugify}}
<br>
字符串大写 :<span>&nbsp;</span>{{words}}---{{words|upper}}
<br>
字符串中间的链接可点击:<span>&nbsp;</span> {{words}}---{{words|urlize}}
<br>
字符串中的单词数 :<span>&nbsp;</span>{{words}}---{{words|wordcount}}
<br>
距离当前日期的天数和小时数(未来时间):<span>&nbsp;</span> {{fulture}}---{{fulture|timeuntil}}
<br>
{% load myfilter %}
自定义过滤器 {{count}}---{{count|test_filter:10}}
</body>
</html>

效果:

?

4.4、创建自定义过滤器

在子应用下创建New Python package包, templatetag,再创建 myfilter.py文件

myfilter.py 编写自己的过滤器

from django import template
register = template.Library()
@register.filter # 加一个装饰器
def test_filter(value,args):
    return value * args

在 html 中引用,(引用之后需要重启服务器,才能找到这个包)

<br>
{% load myfilter %}
自定义过滤器 {{count}}---{{count|test_filter:10}}
</body>

显示效果

?Jinja2模板?

Jinja2的一些常用过滤器
渲染时不转义 safe
把值的首字母转换成大写,其他字母转换成小写 capitalize
把值转换成小写形式 lower
把值转换成大写形式upper
把值中每个单词的首字母都转换成大写 title
把值的首尾空格去掉 trim
渲染前把值中所有的HTML标签都删掉 striptags

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:28:59  更:2022-10-17 12:31:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 1:32:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计