python web django base skill

web框架本质

socket + 业务逻辑框架实现socket      tonado  node.js
使用WSGI实现socket  django flask

自己实现框架思路

wsgiref socket
路由系统
自己写逻辑(views)
jinja2  模板引擎(templates) 实现动态页面,修改返回给浏览器的字符串
去db取数据(models)

web框架流程

流程:  wsgi --> 路由系统 -- views(核心逻辑) --- template(拿html) --- )db  (model)1 用户请求到wsgiwsgi整理用户请求env,加上一个返回数据的conn,传给后面路由系统
2 请求到路由系统
3 请求到view, 核心逻辑
3 tpl 拿模板     模板引擎 jinja2
4 数据库拿数据  ORM(Model)
5 合在一起
6 使用 步骤 1 传过来的conn,回传数据

install django and create a django project

pip install django=1.9.5
django-admin startproject my_site  创建工程
cd mysite
python manage.py startapp monitor       创建APP
python manage.py startapp cmdb          创建APP1
python manage.py runserver 0.0.0.0:9999这几条命令然并卵,可以在pycharm上面图形化操作

来吧,开始django吧

全局配置

一般一看就明白,添加一个新的
STATICFILES_DIRS = ( os.path.join(BASE_DIV, "statics"), ) js css img放在这里

后台管理manage.py 命令

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser   # 创建超级用户管理后台
python manage.py shell在settings 里面配置数据库引擎

路由系统 urls

普通         (r"^/index/", vews.index),
动态传参数    (r"^/index/(\d+)", vews.index),
路由分发      (r"^/index/", include("appname.urls")),

template 模板

取值
list dict object 通过.来取值
li = [1,2,3]
dic = {"k1":"v1", "k2":"v2"}
{{ k1 }}
{{ li.0 }}
{{ dic.k1 }}逻辑控制
{% for item in data %}{{ item }}{{ forloop.counter }}  特殊变量 索引{{ forloop.first }}  特殊变量  是否是第一个{{ forloop.last }}  特殊变量   是否是最后一个
{% endfor %}{% if 1 == 1%}
{% else %}
{% endif %}母版定义{% block blockname %}{% endblock %}使用:{% extend "front/xx.html" %}经验:一般会定义4个blocktitle  css content js  子html在继承的时候一般都是修改这几块导入直接导入一个小的元素{% include "front_app/ss.html" %}内置函数自定义函数  -- 然并卵,直接在python中做,不就行了分类:filter 只能穿一个参数      支持if的条件,通过管道simple_tag 可以穿多个参数  不支持if的 条件settings中注册APP在APP里面创建templatetags创建任意py文件,在里面写函数from django import templatefrom django.utils.safestring import mark_safefrom django.template.base import resolve_variable, Node, TemplateSyntaxErrorregister = template.Library()  # 这个名字不能改@register.filterdef plus_10(arg):return arg + 10@register.simple_tagdef my_simple_time(v1,v2,v3):return  v1 + v2 + v3@register.simple_tagdef my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result)使用:{% load xx %}  先导入{% k1|f1 %}{% my_simple_time 1 2 3%}  在使用,后面是参数{% my_input 'id_username' 'hide'%}

简单数据库管理

基本说明

class注册admin
admin.site.register(CLASS)def __str__():   为了让现实好看,在model下面覆盖此方法
有个admin的页面可以使用,简单的数据库管理后台

定制admin界面

写一个定制类,继承 admin.ModelAdmin
class BookAdmin(admin.ModelAdmin):list_display = ('name', 'publisher', 'publish_date')list_filter = ('publisher', 'publish_date')list_editable = ('name', 'publish_date')list_per_page = 10 # 每页显示多少list_selected_related = ()serach_fields = ('name', 'publish__name')  # __ is magic# 定制详细页面filter_horizontal = ('authors', )  # 针对多对多 Manytomanyraw_id_filds = ('publisher', )  # 针对ForeignKey国内有一个xadmin ,深度定制admin,效果很棒定制admin action
actions = [f1, ]  # 在BookAdmin装饰类中新增,  f1(bookAdmin, request, querySet) 是一个函数,处理逻辑的定制显示颜色
在model中写一个函数,返回style
在BookAdmin 装饰类中 list_display = (f1)

数据库model

写classclass User(model)modes.CharField(maxlength=32)modes.IntegerField()配置settings    INSTALL_APPS创建数据库
python manage.py makemigrations
python manage.py migratecurd操作models.UserInfo.objects.create(username=“yangli”, password="123456")
models.UserInfo.objects.create(**dict)
obj = models.UserInfo(username="yangli2", password="12345")
obj.save()models.UserInfo.objects.filter(   ).delete()
models.UserInfo.objects.filter(  ).update(password="123")  # 这种修改方式效率高models.UserInfo.objects.get(id=1)
models.UserInfo.objects.filter(  ).all()
models.UserInfo.objects.filter(  ).all().values(id,email)     # 字典
models.UserInfo.objects.filter(  ).all().value_list(id,imail)  # list and tuple
models.UserInfo.objects.filter(  ).first()   last()
models.UserInfo.objects.filter(name="yangli")
models.UserInfo.objects.filter(name__exact="yangli")
models.UserInfo.objects.filter(name__iexact="yangli")
models.UserInfo.objects.filter(name__contains="yangli")
models.UserInfo.objects.filter(name__icontains="yangli")
models.UserInfo.objects.filter(name__startswith="yangli")
models.UserInfo.objects.filter(name__endswith="yangli")
models.UserInfo.objects.filter(name__range=[1, 3]).order_by("-name")  # 排序
models.UserInfo.objects.all()[0:2]连表查询
# __ is magic, 可以作用于外键的属性
models.Entry.objects.filter(blog__name__contains="科技模块")
models.Entry.objects.filter(blog__name__icontains="tech")字段对比查询
from django.db.models import F
models.Entry.objects.filter(n_comments__gt=F('n_pingbacks') * 2 )
models.Entry.objects.filter(mode_date__gt = F('pub_date') + timedelta(days=3))  # 在发布3天后修改的所有实体添加有关联的表格:
book -- publisher   one-to-one
book -- authors     many-to-many
new_book = Book(title = "learn python to Alex",publish_id = publish_id   # class 中没有publish_id,但是可以这么用,不用传一个对象# authors 是一个多对多的关系,先保存再添加
)
new_book.save()
new_book.authors.add(1,2,3)
new_book.authors.add(*authors_ids)返回动态数据给页面
render(request, "t1.tpl", {"li":users_list})注意配置模板的路径当使用post提交数据的时候,暂时先注释settings里面的csrf常用的数据库字段和属性类型:
https://docs.djangoproject.com/en/1.10/ref/models/fields/#primary-keyIntegerField()   FloatField()
CharField()  TextField()
DateField()
EmailField()
TimeField()
ImageField()  FieldPathFiled()  # 数据库里面存的是路径,django admin 提供直接上传的功能Filed option
null=True  # 限制db
bank=True  # 限制django admin form
uniq=True
default="default"
primary_key=Truetauto_now      当前时间,创建的时候更新
auto_now_add  当前时间,每次修改更新gender_choices = ((0, "female"),(1,"male"),)
choices=gender_choicesvolidators = []
upload_to="upload"  # FileFiled() ImageField()  指定文件放在什么地方

数据库高级增删改查

content:在test.py通过 django API  操作数据库设置环境变量import osos.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectname.settings")import djangodjang.setup()

路由系统

    直接路由包含跳转路由括号传参数定义别名  ?P<name>字典传额外参数

模板 template

渲染模板 jianja2

    把字典通过render()传给渲染模块, 字典的value是object,在模板里面通过 . 来取对象的属性li = []  dic = {}  user = User(name="yangli", password="123")li.1 dic.k1  user.name  user.password常见语法:{% for item in objs %}{{  item }}{% endfor %}{% if forloop.count0|divisibleby:"2" %}{% else %}{% endif %}模板小结:没有while循环,因为while循环可能是死循环,这个后端不能够有这个模板中不能够设置变量当模板中使用了一个变量,render并没有传过来的时候,并不会报错,仅仅留空

模板继承

    父亲:自定允许修改的块{% block name %}{% endblock %}儿子:{% extend "path" %}  # 儿子继承一个父类{% block name %}  # 在这里重写父亲的块{% endblock %}# include 这个插件{% include "app01/registor.html" %}继承小结:模板继承可以嵌套,父亲和爷爷辈的都可以重写模板继承不能多继承

前端 frontend html css js jQuery ajax6

转载于:https://www.cnblogs.com/yangliw3/p/5989108.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑常见的VGA、DVI、PS/2、USB等接口知识笔记

我们经常见到电脑和网络设备上都少不了VGA、DVI、PS/2、USB等常用接口&#xff0c;那些接口里面有多个针脚&#xff0c;他们每个针脚都有自己的用途&#xff0c;今天电脑学习小编就带大家一起看看这些接口神秘用途。 现在很多朋友们可能会遇到VGA线或HDMI线不够长&#xff0c;或…

mysql kill_Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)

在使用mysql运行某些语句时&#xff0c;会因数据量太大而导致死锁&#xff0c;没有反映。这个时候&#xff0c;就需要kill掉某个正在消耗资源的query语句即可&#xff0c; KILL命令的语法格式如下&#xff1a;KILL [CONNECTION | QUERY] thread_id每个与mysqld的连接都在一个独…

数据库:MySQL、HBase、ElasticSearch三者对比

1、概念介绍 MySQL&#xff1a;关系型数据库&#xff0c;主要面向OLTP&#xff0c;支持事务&#xff0c;支持二级索引&#xff0c;支持sql&#xff0c;支持主从、Group Replication架构模型&#xff08;本文全部以Innodb为例&#xff0c;不涉及别的存储引擎&#xff09;。 HBas…

mysql 附加数据库文件_mysql附加数据库文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

SpringBoot集成Mybatis用法笔记

今天给大家整理SpringBoot集成Mybatis用法笔记。希望对大家能有所帮助&#xff01;搭建一个SpringBoot基础项目。具体可以参考SpringBoot:搭建第一个Web程序引入相关依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><ar…

wifi-mac

//18:a6:f7:12:0b:8b //18:a6:f7:1e:a9:57 //18:a6:f7:1f:8e:69 //18:a6:f7:12:0b:9c //18:a6:f7:1f:cd:d4 //18:a6:f7:1c:94:35 转载于:https://www.cnblogs.com/mayidudu/p/5991781.html

网络知识:交换机中的半双工与全双工知识笔记

今天小编给大家分享一下交换机中半双工与全双工相关知识&#xff0c;希望对大家能有所帮助&#xff01; 早期的网络设备HUB&#xff08;集线器&#xff09;就是半双工&#xff0c;目前基本没有人用了&#xff0c;而现在用的SWITCH&#xff08;交换机&#xff09;就是全双工。 a…

yum 安装mysql 启动_linux(centos6.9)下使用yum安装mysql,及启动MySQL等

查看系统自带的mysql版本&#xff1a;rpm -qa | grep mysql卸载mysql&#xff1a;rpm -e mysql-libs-5.1.73-8.el6_8.x86_64 --nodeps1. 安装mysql 服务器端&#xff1a;yum -y install mysql-server mysql-devel2. 安装mysql客户端&#xff1a;yum install mysql3. 启动mysql服…

硬件知识:U盘插入电脑没反应相关解决办法整理

目录 一、U盘可能被隐藏 二、USB端口被BIOS禁用 三、电脑的USB驱动可能有问题 今天小编给大家介绍一下U盘插入电脑没反应相应的解决方案&#xff0c;希望对大家能有所帮助&#xff01; 一、U盘可能被隐藏 首先换台电脑看看是不是U盘损坏的问题&#xff0c;如果不是&#xff0c;…

分享9个实用的电脑维修技巧,赶紧收藏吧

目录 01、电脑不能上网 02、电脑蓝屏 03、没有声音 04、没有画面 05、软件无法启动 06、显示器画面不能满屏显示 07、使用过程中自动关机 08、电脑不能开机 09、电脑花屏 今天给大家分享9个实用的电脑维修技巧&#xff0c;赶紧收藏吧&#xff01; 01、电脑不能上网 常见原因1&a…

自媒体资源:分享8个免版权视频素材网站

目录 01. 知鱼素材 2、 gaiamount 3、 lifeofvids 4、Coverr 5、stock footage 6、vidsplay 7、Pixabay 8、Pexels 今天小编就给大家分享一些免版权的视频素材网站&#xff0c;有需要的小伙伴赶紧欢迎收藏&#xff01; 01. 知鱼素材 https://sucai.zhiyu.art/video 共享协议可免…

win7 mysql msi_windows下的Mysql安装与基本使用(msi)

本文针对mysql5.6与5.5一、其他版本与安装方式1.msi(mysql5.7及以上版本参考&#xff1a;https://www.cnblogs.com/zjiacun/p/6653891.html)这里我们用msi吧&#xff0c;只是单纯练习的话&#xff0c;简单很多二、msi安装(5.5-5.6)1.点击安装文件&#xff0c;在出现的安装向导上…

java中split以“.“ 、“\“、“|”分隔

今天项目里遇到以"." 、"\"、“|”分割字符串&#xff0c;直接用"." 、"\"、“|”无法分割&#xff0c;因为"." 、"\"、“|”是特殊字符&#xff0c;需要转义&#xff0c;"\\." 、"\\\"、“\…

推荐这11款免费好用的 Mac 软件

目录 1、IINA —— 全能视频播放器 02、大拍档剪辑助手 03、Dozer 04、Cheatsheet 05、Spectacle 06、Amphetamine 07、Macs Fan Control 08、AdGuard 09、Keka 10、腾讯柠檬清理 11、Cold Turkey Blocker 1、IINA —— 全能视频播放器 对于Mac OS来说&#xff0c;IINA可以说是…

三角形

源代码&#xff1a;#include<cstdio> #include<map> #define LL long long#define INF 1000000000 using namespace std; map <double,LL> i; //这个STL差不多就是一个反类型数组。 double f[100001]; LL n,Num(0); LL C(LL N,LL M) //排列组合。 {if (N<…

物理机存放mysql实例原则_MySQL优化笔记(四)--表的设计与优化(单表、多表)...

前面讲了SQL优化以及索引的使用、设计优化了&#xff0c;那么接下来就到表的设计与优化啦&#xff01;&#xff01;&#xff01;真实地去设计优化单表结构以及讲述多表设计基本原则(结合真实的生产环境的取舍来讲述)。文章结构&#xff1a;(1)单表设计与优化&#xff1b;(2)基于…

电脑维修:电脑维修必备工具整理

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

iOS appstore分级

我在周五晚上十点多的时候上传ipa到App Store&#xff0c;周六凌晨二点多就收到审核信息&#xff08;这是Apple吗&#xff0c;审核速度我就不敢相信&#xff09;&#xff0c;然后收到他们的邮件&#xff0c; 大概意思就是你的app可以销售了&#xff0c;大概要等24小时能在App S…