django框架(一)

Django框架

  • django 简单的开发框架,是简单的三层逻辑架构,MVT

Django基本过程

  1. 用户在浏览器中输入地址
  2. URL路由器(路由器根据提交的URL地址调取相应的函数
  3. 函数会通过model与数据库进行交互(从数据库中获取想要的信息)
  4. 浏览器会根据HTML中的代码进行将相应的信息添加的到指定的位置

图例解析

  • 比如用户输入网址,通过网址路由到 项目URL路由,URL又将地址路由到组成项目APP中(此处的APP是对项目主题进行分解,不是手机中的APP),APP又通过路由路由找到相应的函数,函数会返回用户请求的界面,如果里面有需要查询的数据,就后通过model查询 DB数据,返回。然后浏览器就自动对其解析,返回的HTML中 位置是有名字的,比如 用户姓名,返回的数据中也有用户姓名,浏览器就会把数据匹配到HTML界面中

django图解
项目初始化

  • 在建立项目之初需要对项目进行项目分析,就是项目整体分成几个APP,我做的第一个网站 主要分成了 四个部分 用户信息、操作信息、机构信息、课程信息,每一部分对应一个APP,主要是依据数据来分的
django-admin startproject first_project   # 项目建立,建立后可以看下里面都有什么呀
python manage.py startapp [APP名称]   # 建立项目后,cd 到项目中,否则找不到manage.py 然后再执行命令

# 命令行运行项目 端口可自行设置
python manage.py runserver 8000

# 查看 mange.py 中的命令
python manage.py 

# 从别的地方抄来了一段代码,可以简单的看下
#下面的部分是写在view里面的
from django.http import HttpResponse
from book.views import book
from move.views import move

def index(request):
    return HttpResponse("首页")

def book(request):       
    return HttpResponse("图书首页")

def movie(request):
    return HttpResponse("电影首页")
    
    
# 下面的部分是写在主URL里面
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',index),
    path("book/",book),   # URL中book  对应上面的book函数   所以返回的是图书首页
    path("movie/<movie_id>",movie)    # URL中book  对应上面的movie函数   所以返回的是电影首页,<movie_id> 为url中传输的参数
]

#views.py中获取参数  两种方法
def movie(request):
	movie_id = request.GET.get("id")
	text = movie_id
	return HttpResponse(text)

def movie(request,movie_id):
	text = movie_id
	return HttpResponse(text)

setting设置

# debug 模式
DEBUG = True

# 允许访问地址(白名单)
ALLOWED_HOSTS = ['127.0.0.1']

# APP注册
INSTALLED_APPS = [
	'APP_one',
	'APP_two',
]

Django路由

# APP中设置url
from django.urls import path ,include
urlpatterns = [
	path('book/',include("book.urls"))
]

Django 传递参数

urlpatterns = [
    path('news/<news_id>', views.news_detail),
    path('news/news_detail/', views.news_detailone),
]

def news_detail(request,news_id):
    return HttpResponse("新闻详情页-{}".format(news_id))

def news_detailone(request):
    news_id = request.GET.get("news_id")
    return HttpResponse("新闻最新页-{}".format(news_id))

URL模块化

  • 各个APP模块中自建路由映射
  • 主路由中通过include进行映射APP中得路由

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/',include("book.urls"))
]

url命名与反转

# 应用命名空间 app_name = 'front'
app_name = 'front'

urlpatterns = [
    path('sigin/',views.login,name='login'),
]


from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse

def index(request):
	username = request.GET.get("username")
	if username:
		return HttpResponse("后台首页")
	else# reverse('login')  ->  /front/singin/
		# url 反转
		reverse_url = reverse('front:login')
		return redirect(reverse_url)


def login(request):
	return HttpResponse("后台登陆界面")

url反转传参

# 传参方式
reverse("front:login",kwargs={"uid":1})

def index(request):
	username = request.GET.get("username")
	if username:
		return HttpResponse("后台首页")
	else:
		# 设置默认传入参数
		reverse_url = reverse("front:login",kwargs={"uid":1})
		return redirect(reverse_url)

def login(request,uid):
	return HttpResponse("后台登陆界面{}".format(book_id))

指定默认参数

# article/views.py

article_lists = ["a","b","c"]

def article(request):
	return HttpResponse(article_list[0])

def page(request,page_id=0)
	return HttpResponse(article_lists[page_id])


# article/urls.py
from django.urls import re_path,path
from . import views
urlpatterns = [
	path("",views.article),
	path("page/",views.apge)
	path("page/<int:page_id>",views.page),
]

re_path函数

  • 和path一样,通过正则表达式实现一些复杂的映射需求。
article/urls.py
------------------------------------------------------------------
from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r"^$",views.article),
    re_path(r"^article_list/(?P<year>\d{4})/",views.article_list)
    re_path(r"^article_list/(?P<mouth>\d{2})/",views.article_mouth)
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值