Python全栈 Web(Django框架、概述、项目配置)

简介: Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发、项目、flask项目、项目实战、django框架、Python项目、Python的Flask框架、Python.


前言:

    Flask虽然是轻量级框架但是复杂操作需要自己写扩展和灵活性还是非常高的

    基于Flask的项目 我就写在一个博客里了  持续更新。。。



Django众所周知的Pythonweb框架


之前写过一篇Django的博客 是1.11.8版本的 后来决定先写Flask 

所以就没有持续更新   Django1.11.8版本


今天我们说的是Django2.xx版本  2.xx版本还是有所不同的 

大概19年初中期就会出2.xx的长期支持版 



Django

Django 项目是一个Python定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。
Django 框架的核心组件有:
  1. 用于创建模型的 对象关系映射
  2. 为最终用户设计的完美管理界面
  3. 一流的 URL 设计
  4. 设计者友好的模板语言
  5. 缓存系统
当前使用的版本是最新版  也就是2.1.2版本

Django也是MTV模式的框架和Flask一样  Python的框架模式基本都是MTV的
某种意义上也可以说是MVC

框架模式:
MTV
M: Models 数据库模型
T:Templates 模型
V: views 视图


安装Django



Django框架的安装:
查看已经安装的版本
进入Python的交互模式
import django 如果没有报错说明已经安装Django

django.VERSION 查看Django版本


>>> import django 
>>> django.VERSION
(2, 1, 2, 'final', 0)
>>> 


安装Django
在线:

sudo pip3 install django[==版本号] 默认最新版


sudo pip3 install django


离线:

下载安装包
tar -zxvf Django-1.11.8.tar.gz
cd Django-1.11.8
sudo python3 setup.py install


创建django项目


手动创建


MacBook-Pro:Downloads paris$ mkdir django
MacBook-Pro:Downloads paris$ cd django/
MacBook-Pro:django paris$ django-admin startproject mydjango
MacBook-Pro:django paris$ cd mydjango
MacBook-Pro:mydjango paris$ ./manage.py runserver


Django项目结构介绍:
manage.py
包含执行Django的各项操作的指令(子命令)
如包含启动服务 runserver
创建项目 Django-admin
创建管理员 createsuperuser
。。。



启动服务后就可以访问了





我还是用pycharm创建  方便一点


File ->New Project ->Django   


默认的项目结构




db.sqlite3  是数据库的的文件  运行一次就会自动创建  删除了 下次允许还会有 所以先无视

views不是自带的  需要手动创建



主目录(与项目名称一致)
__init__.py
项目的初始化文件 服务被启动 该文件自动运行
urls.py
项目的URL配置文件 基础路由配置
wsgi.py
Web Server Gateway Interface
web服务网管关借口
setting.py
1.BASE_DIR 获取当前项目的绝对路径
2.DEBUG False关闭 True开启调试模式
3.ALLOWED_HOSTS:
是否允许在局域网内被其他机器访问
如果允许就在此列表内添加
推荐写["*"] 代表当前局域网内的所有机器都可以访问项目

如果允许被其他机器访问必须使用一下方式启动项目
./manage.py runserver 本机ip:端口号(默认8000)
4.INSTALLED_APPS
指定已经安装的应用 如果有自定义应用的话 需要在此注册
5.MIDDLEWARE:
中间件 如果有自定义的中间件 需要在此注册 过滤拦截请求响应
6.ROOT_URLCONF
用于指定项目路由的基础路由的配置文件
7.TEMPLATES
指定模板的信息
8.DATABASES
指定数据库的信息
9.LANGUAGE:
语言设置 如果允许为中文 允许将值设置为"zh-Hans"
10.TIME_ZONE
指定时区 中国区 允许设置为"Asia/Shanghai"
11.STATIC_URL
用于配置静态文件路径



这里可以看到配置路由的函数是path   而不想之前的版本是url

这里url也是可以用的  不过官方给的默认配置都给成了path


path的使用:

from django.urls import path, re_path

默认在主目录中 主路由配置文件 会包含基本的地址映射
通过url中定义好的地址找到对应的视图函数
path语法:
path(route, view, kwargs=None, name=None)
route:
路由地址 不支持正则
view:
视图处理函数的名称
kwargs:
键值对给view传参用的
name:
为URL起别名 在地址反向解析时用得
re_path语法:
re_path(route, view, kwargs=None, name=None)
route:
路由地址 支持正则表达式
view:
视图处理函数的名称
kwargs:
键值对给view传参用的
name:
为URL起别名 在地址反向解析时用得
通过re_path向视图传参:
使用正则表达式传参
使用子组传参 一个子组就是一个参数
要传递多个参数的话需要使用多个子组 中间用/隔开
使用kwargs传参:
dic = {
"name":Paris,
"age":18
}
re_path(r"^show/$", show3_views, dic)

def show3_views(request, name, age):
return HttpResponse


以下是主目录的urls.py

主目录就是和项目同名的文件夹



"""Demo1 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path
from django.conf.urls import url
from .views import *

urlpatterns = [
    # 后台管理系统
    path('admin/', admin.site.urls),
    # 正则表达式配置url路由
    re_path(r"^show/$", show_views),

    # 路由的匹配规则与flask不一样
    # 如果使用正则的方式匹配路由
    # 如以及sh开头 的匹配规则 有一个满足url以后的都不会再匹配
    # re_path(r"^sh", sh_views),
    # 下面的show就永远都不会被匹配到
    # path("show/", show_views),
    # 使用结尾限制就不会出现匹配不到的情况
    # 或者说直接用path不使用正则也可以
    # re_path(r"^sh$", sh_views),

    # 使用子组传参
    # 匹配show  url后有两位参数的地址
    re_path(r"^show/(\d{2,5})/$", show1_views),
    # 匹配生日
    re_path("show/(\d{4})/(\d{2})/(\d{2})", birthday_views),

    # 在1.11版本里字典传参 如果age是int类型的 到视图函数里还是int类型
    # 但此处到视图后会变成字符串 字符传参的特性不变  形参实参必须相同
    re_path(r"show3/$", show3_views, {"name": "Paris", "age": 18}),


    url(r"^url/$", show4_views)


]




手动在主目录里创建一个views.py 文件   用来配置处理所有的路由的视图函数

并在urls导入


from django.http import HttpResponse


def show_views(request):
    return HttpResponse("我的第一个Django程序")


def sh_views(request):
    return HttpResponse("这是SH视图函数")


def show1_views(request, num1):
    return HttpResponse("这是处理两位数的视图函数  子组参数:%s" % num1)


def birthday_views(request, year, month, day):
    return HttpResponse("您的生日为: %s年 %s月 %s日" % (year, month, day))


def show3_views(request, name, age):
    return HttpResponse("姓名:%s  年龄:%s" % (name, age))


def show4_views(request):
    return HttpResponse("这是使用url函数配置路由")




这里可以看到配置路由的函数是path   而不像之前的版本是url

这里url也是可以用的  不过官方给的默认配置都给成了path




Django的应用:
什么是应用?
应用就是网站中一个独立的程序模块
在Django中 主目录不处理用户请求
主目录主要是做项目的初始化以及请求分发(分布式请求处理)
而具体的请求 由具体的应用去处理
创建应用
指令
./manage.py startapp 应用名称
在settings中进行注册
在INSTALLED_APPS中追加引用名称
应用的结构组成:
migration目录
存放数据库的中间文件
__init__.py
做应用的初始化文件
admin.py
应用的后台管理配置文件
app.py
应用的属性配置文件
models.py
与模型相关的映射文件
tests.py
当前应用的测试文件
views.py
定义视图处理函数的文件
分布式路由系统d
在每个应用中创建一个urls.py 内容可以参考主目录的urls.py
当访问路径是http://192.168.200.133:8000/music/xxx
则交给music的urls去处理

当访问路径是http://192.168.200.133:8000/news/xxx
则交给news的urls去处理

当访问路径是http://192.168.200.133:8000/news/index
则交给news的urls找到index_views去处理



创建4 个APP 每个app的结构都是一样的




分布式路由


"""Netease URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    # 当访问路径是http://192.168.200.133:8000/music/xxx
    # 则交给music的urls去处理
    re_path(r"^music/", include("music.urls")),
    # 当访问路径是http://192.168.200.133:8000/news/xxx
    # 则交给news的urls去处理
    re_path(r"^news/", include("news.urls")),

    re_path(r"", include("index.urls")),

]



news.urls


from django.urls import path, re_path
# from django.conf.urls import url
from .views import *


# 主要实现news应用中的地址与视图函数的处理
# 当访问路径是http://192.168.200.133:8000/news/index
# 则交给news的urls找到index_views去处理
# 该文件中  只需处理news/后面的路由

urlpatterns = [
    # 当访问路径是index的时候交给index_views视图函数去处理
    re_path(r"^$", index_views),
    # url(r"^login/$", index_views)
]

news.views


from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.


def index_views(request):
    return HttpResponse("这是news的index首页")


index.url


from django.conf.urls import url
from django.urls import re_path
from .views import *


urlpatterns = [
    re_path(r"^$", index_views),
    re_path(r"^login/$", login_views),
    re_path(r"^register/$", register_views),
    url(r"^register/$", register_views)
]


index.views


from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.


def index_views(request):
    return HttpResponse("这是首页")


def login_views(request):
    return HttpResponse("这是登录页面")


def register_views(request):
    return HttpResponse("这是注册页面")

小技巧

      每次启动时都需要参数并且pycharm不不会默认传递参数

      这里我在这里重写了一下获取到的shell参数  

      这样测试的时候就可以直接在pycharm运行了  


     创建APP 或者需要其他子命令时 可以重写 或注释后再终端 运行


#!/usr/bin/env python3
import os
import sys

if __name__ == '__main__':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Netease.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc

    ########################### 重写终端参数 #######################
    sys.argv = ['./manage.py', 'runserver', '192.168.200.133:8000']
    ##############################################################

    execute_from_command_line(sys.argv)





相关文章
|
8月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
624 0
|
8月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
690 1
|
8月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
717 0
|
8月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
721 0
|
8月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
404 0
|
开发框架 开发者 Python
深入探究Python Web开发框架:Flask与Django
Python作为一种广泛应用于Web开发的编程语言,其拥有众多优秀的Web开发框架。本文将深入探讨其中两大知名框架——Flask与Django。通过对它们的概念与实践进行比较分析,帮助读者更好地理解和选择适合自己项目需求的Web开发框架。
|
前端开发 数据库 Python
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
708 0
|
开发框架 JSON API
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
【7月更文挑战第22天】在Python Web开发中,设计高效的RESTful API涉及选择框架(如Flask或Django)、明确资源及使用HTTP方法(GET, POST, PUT, DELETE)来操作数据。响应格式通常是JSON,错误处理也很重要。示例展示了使用Flask创建图书管理API,包括版本控制、文档化、安全性和性能优化是最佳实践。这样的API使数据交互更顺畅。
347 2
|
设计模式 开发框架 数据库
Python Web开发主要常用的框架
【5月更文挑战第12天】Python Web开发框架包括Django、Flask、Tornado和Pyramid。Django适用于复杂应用,提供ORM、模板引擎等全套功能;Flask轻量级,易于扩展,适合小型至中型项目;Tornado擅长处理高并发,支持异步和WebSockets;Pyramid灵活强大,可适配多种数据库和模板引擎,适用于各种规模项目。选择框架需依据项目需求和技术栈。
473 2
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
949 45

推荐镜像

更多