python Django基础操作
2019-07-24 09:29:51来源:博客园 阅读 ()
Django常用命令
创建Django项目
Django-admin startprotect mysite
创建项目以后,以下生成的文件
最外层的file:mysite/ 根目录只是你的项目的容器,Django不关心它的名字,你可以将它重命名为任何你喜欢的名字
manage.py: 一个让你用各种方式管理Django项目的命令行工具。可以阅读:django-admin and manage.py 获取更多manage.py的细节
里面一层的mysite/目录包含你的项目 它是一个纯python的包。它的名字就是当你引用它内部任何东西时需要用到的python包名 (比如:mysite.urls)
mysite/__init__.py: 一个空的文件夹,告诉python这个目录应该被认为是一个python包
mysite/settings.py: Django项目配置文件。
mysite/urls.py: Django项目的URL声明,就像你网站的“目录”
mysite/wsgi.py: 作为你的项目的运行在WSGI 兼容的web服务器上的入口。
修改settings文件以下行:
1. ALLOWED_HOSTS=['*'] 允许的主机后面加*或者加对应的ip
2. LANGUAGE_CODE='zh-Hans' 语言编码改为:zh-Hans
3. TIME_ZONE='Asia/Shanghai' 时区必变 Asia/Shanghai
4. USE_TZ=False 改为 False
创建App
python manage.py startapp polls
app 创建完以后, 修改settings 文件以下内容
修改urls内容 (作为跳转使用, 方便以后管理)
注: 何时使用include
path的四个参数(两个必传,两个可选)
path参数: route
path参数:views
path参数:kwargs
path参数:name
创建完成以后,polls文件夹下面的内容为:
创建urls.py文件,写以下图内容
写models文件
from django.db import models # Create your models here. class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
生成models迁移文件
python manage.py makemigrations polls
注:如果不写polls的话,为全部APP
把迁移文件写入数据库
python manage.py migrate
进入shell环境:
python manage.py shell
通过模型类操作数据表
# 进入shell环境以后,首先导入模型 from polls.models import * # 导入全部模型 from django.utils import timezone # 导入时间模块 # 创建方法一: q = Question(question_text="什么地方的菜最有特色?", pub_date=timezone.now()) q.save() # 关联创建,用问题关联创建选项 q.choice_set.create(choice_text="湖南") # 创建方法二: q = Question() # 创建实例对象 q.question_text = "什么地方的菜最有特色?" q.pub_date = timeaone.now() q.save() # 创建方法三: Question.objects.create(question_text="什么地方的菜最有特色?", pub_date=timezone.now())# *********************************************** # 修改方法一: Question.objects.update(question_text = "什么地方最好玩?") # 修改方法二:(这个方法不适合批量修改,只以最后一次保存为准,请谨慎使用) q.question_text = "什么地方的菜最有特色?" # *********************************************** # 删除:(先查询到某个id的内容,然后用删除命令) q = Question.objects.get(id=1) q.delete() # *********************************************** # 查询 q = Question.objects.all() # 查询全部 q = Question.objects.get(id=1) # 查询指定的一个 Question.objects.filter(question_text__startswith='什么地方') # 过滤查询,查询 以某某 开头的内容 q.choice_set.count() # 查询跟本问题关联的选项的个数 Choice.objects.filter(question__pub_date__year=current_year) # 查找问题发布日期为本年 的所有的选项 # 关联查询 q.choice_set.all() # 查询跟这个问题关联的所有的选项
运行项目 (python manage.py runserver)
一、本机测试运行命令
# 在cmd命令行,cd进入项目所在目录,调试好当前项目所用的python环境,我这里用的py_data环境,使用 python manage.py runserver 命令 (py_data) D:\python\django\mysite>python manage.py runserver
二、 本机做为主机运行命令 (python manage.py runserver 0.0.0.0:8080)
# 在cmd命令行,cd进入项目所在目录,调试好当前项目所用的python环境,我这里用的py_data环境,使用 python manage.py runserver 命令 (py_data) D:\python\django\mysite>python manage.py runserver 0.0.0.0:8080
编写views
往页面上渲染文字, 不做任何跳转, 用HttpResponse
from django.http import HttpResponse # 导入django内置模块 HttpResponse def index(request): """ 测试:只往网页上返回文字 """ return HttpResponse("<h2>Hello World!!</h2>") # 可以写入H5标签
用一个APP之间跳转使用render
from django.shortcuts import render # 导入django内置模块render def index(request): """ 测试:同一App之间的页面跳转 context为字典形式,里面传入的内容为键值对形式,为需要往网页上面渲染的内容 """ context = {} return render(request, "polls/index.html", context)
不同app之间的页面跳转使用HttpResponseRedirect和reverse搭配使用
from django.http import HttpResponseRedirect from django.urls import reverse def login(request): """ 测试:登陆成功,跳转网站首页 """ info = dict(rquest.POST) '''判断登陆信息与数据库是否相同,如果相同做以下跳转''' return HttpResponseRedirect(reverse("index:index")) '''判断登陆信息与数据库如果不相同,做以下跳转''' return render(request, "polls/index.html", context={"message": "账号和密码不对,请 重新登陆"})
提取权限控制,get和post访问返回提示
from django.shortcuts import render from django.http import HttpResponse # 提取共同的方法,写成装饰器,在需要用到的地方,加上这个权限控制 # 访问页面如果用的是post请求,执行views里面加入装饰器的方法, # 如果用的是get请求,返回没有权限浏览页面 def verify_control(fun): def verify_con(request): if request.method == 'POST': return fun(request) elif request.method == 'GET': return HttpResponse("你没有权限浏览该网页") return verify_con
接口写法,返回形式为json格式
from .models import * import json from .verify import * # 导入写入的权限控制 import re from django.shortcuts import render from django.http import HttpResponse @verify_control # 加入装饰器,如果用的get方式提交,则提示没有权限 def api_add_question(request): """ 测试:用接口的形式提交 本接口为前端新建问题,用post提交数据 需要用到的参数:{"question_text": "xxx","pub_date":"2019-01-17"} """ info = dict(request.POST) try: Question.objects.get(question_text=info["question_text"][0]) except Subject.DoesNotExist: 新建teamplates和static文件夹 teamplates(里面放的是网站的html文件) static(里面放的是css,js ,图片,音乐,视频等一系列的文件) 注:teamplates下面新建app同名的目录,方便以后发布网站时,整理静态文件和html文件 Question.objects.create(question_text=info["question_text"][0], pub_date=info["pub_date"][0]) return HttpResponse(json.dumps({"message": "添加成功"})) else: return HttpResponse(json.dumps({"message": "该问题已经存在,不需要重添加"}))
新建teamplates和static文件夹
teamplates(里面放的是网站html文件)
static (里面放的css,js,图片,音乐,视频等一系列的文件)
注意!!!:teamplates下面新建app同名的目录,方便以后发布网站时,整理静态文件和html文件
原文链接:https://www.cnblogs.com/haozong/p/11235809.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Python基础总结之第二天从变量开始(新手可相互督促)
下一篇:Python部分
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash