django--没有整理,笔记

https://docs.djangoproject.com/en/2.2/经常使用的数据路命令:python manage.py makemigrations   数据移植准备python manage.py migrate          数据移植配置显示中文是时间区域LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'pip install pipenv  安装pipenvpipenv install  建立虚拟环境在虚拟环境安装库使用  pipenv install  ***   卸载使用  pipenv uninstall ***进入虚拟环境   pipenv shellpipenv --venv  查看虚拟环境对应解释器的安装目录退出虚拟环境   exit建立项目 项目名称mytestdjango-admin startproject mytestpython manage.py runserver     启动服务器(在项目目录下)python manage.py runserver 9999  改端口号建立应用:python manage.py startapp bobo 建立bobo的应用建立完成时候 首先是把应用添加到项目mytset里面配置文件setting.py里面的 INSTALLED_APPS里应用的讲解:migrations:数据移植(迁移)模块admin:当前应用的后台管理的配置文件apps.py:当前应用的配置models:数据模型模块,建立数据表子啊这里建立的,使用ROM框架tests:自动化测试模块views:执行响应的逻辑代码,代码逻辑处理的主要地点,主要的代码编辑区建立字段:name = models.CharField(max_length=20,verbose_name=u'用户名')#注释当指定字段能够为空的时候须要在参数后面加null= True blank = True  这两个都要是True也能够赋值默认值 default='',意思是当没有值的时候默认是''定义主键是primary_key = True ,verbose_name='注释用的'全部类型:'AutoField自增', 'BLANK_CHOICE_DASH空白\选项\破折号', 'BigAutoField大自动场', 'BigIntegerField大积分场','BinaryField二进制字段', 'BooleanField布尔菲尔德', 'CharField查菲尔德', 'CommaSeparatedIntegerField通讯分离的tegerfield','DateField日期字段', 'DateTimeField日期时间字段', 'DecimalField德西马尔菲尔德', 'DurationField工期字段','EmailField邮件字段', 'Empty空的', 'Field', 'FieldDoesNotExist', 'FilePathField文件路径字段','FloatField浮点', 'GenericIPAddressField', 'IPAddressField IP', 'IntegerField整数','NOT_PROVIDED', 'NullBooleanField空布尔', 'PositiveIntegerField正整数域','PositiveSmallIntegerField正小整数', 'SlugField', 'SmallIntegerField'小整数, 'TextField'文本字段,'TimeField时间字段', 'URLField'网站字段, 'UUIDField',作第一个响应网页:在views里面引用from django.http import HttpResponse建立一个函数def index(request):                return HttpResponse('Hello word!')在项目mytest中的 urls配置这个函数的url开发一个Template:在web下建立一个templates目录,在该目录下穿件一个HTML文件在views.py中返回一个render()传参数:第一个是request,第二个是html文件,第三个传的是字典:key是参数名,value是传递的数据是后台传递到模板的参数,在模板的使用是{{参数名}}来直接使用注意点:以上的有中状况,当html文件名陈同样,可是应用不同的时候会出现调用同一个html。这是为了处理这个问题,在templates下建立个应用相同的文件夹,而后把html放进去以后就解决了这个问题Models介绍:ORM一个Models对应一张数据库的表。编写Models建立一个类继承models.Model,一个类就是一张数据表在类中建立数据表的字段字段名=models.字段属性(长度限制等)参考官方文档:https://docs.djangoproject.com/en/1.10/ref/models/fields/建立好数据模型以后要映射成咱们的数据表执行python manage.py makemigrations app名(可选) 不写就默认整个项目再执行python manage.py migrate  进行数据迁移成功以后能够在应用下的migrstions下的文件查看查看SQl须要执行 python manage.py sqlmigrate 应用名 文件ID 查看SQL语句如 python manage.py sqlmigrate web 0001取数据库的数据展现在html上:在views中导入数据库from web.models import testwebdef index(request):    user_name = testweb.objects.get(user='张三')#这个就是字段=值,也能够主键值pk=1    return render(request, 'web/index.html',{'user_name':user_name})在html中:进行展示<h1>{{ user_name.user }}</h1><h3>{{ user_name.aihao }}</h3>admin模块:admin是django自带的自动化数据管理界面被受权用户能够直接在admin界面中管理数据库首先是建立一个超级用户:python manage.py createsuperuserusername = adminpassword=zyb563151登陆amdin127.0.0.1:8000/admin/登陆过程当中能够遇到403 ,换个浏览器就解决问题了登陆上去以后是没有任务数据的,须要配置数据 在应用下的admin.py里面 是用来配置admin的导入数据库名称from web.models import testwebadmin.site.register(testweb)数据有了但要改一下显示问题,让他显示人名称早在models下数据库testweb下添加一个方法__str__(self)或者__unicode__(self) -->版本不一样不一样return self.uesrhtml中循环展现:{% for xx in xxs %}HTML语句{% endfor %}首先是views里面先要获取全部的对象def index(request):    user_names = testweb.objects.all()    return render(request, 'web/index.html',{'user_names':user_names})#返回的是一个查询结果的集合对象 能够看作是一个列表HTML里面写Django中的超连接html中<a href后面是目标地址template 中能够用{% url 'app_name:app_name' param %}#app_name:应用名称 app_name:链接名称 param:地址参数,如user_name其中app_name:app_name都是在url中配置第一种写法:更urls,写include()的第二个参数位置,namespace = 'web'第二种写法:应用下写在url()的第三个参数位置,name='user_name'区别是:是否使用include引用了另外一个url配置文件最后在应用的urls中加上app_name = '应用名'编辑响应函数:使用request.POST['参数名']获取表单数据models.Article.objects.create(user,content) 建立对象Templates 过滤器写在模板中的,属于django的模板语言能够修改模板中的变量,从而显示不一样的内容怎么使用过滤器?{{变量 | 过滤器}}列:{{list | length}}能够叠加 {{value | filter1 | filter2 |...}}如在编辑界面的代码        <input type="hidden" name="user_aihao" value="{{ aihao.id | default:'0'}}">        中的| default:'0'就是过滤器,意思就是没有的时候我给0django shell:它是一个Python的交互式命令行程序,自动引入了咱们的项目环境,可使用它和咱们的项目进行交互怎么使用 Django Shell?python manage.py shell好比:from web.models import testwebtestweb.objects.all()  能够直接获取数据主要是能够调试 测试未知的方法好比:testweb.objects.all().values()不知道返回什么东西,什么格式,能够查看admin想要在admin看见更多的信息  显示其余字段建立admin的配置类class testwebAdmin(admin.ModelAdmin)注册语句后加 admin.site.register(testweb.testwebAdmin)list_display = ('user','aihao')list_display同时支出tuple和listlist_filer = ('put_time',) 过滤器更多的admin的参考https://docs.djangoproject.com/en/1.10/ref/contrib/admin/链接mysql用它做为数据库# DATABASES = {#     'default': {#         'ENGINE': 'django.db.backends.mysql',#         'NAME': '数据库名字',#         'USER':'登陆数据库的用户名',#         'PASSWORD':'密码',#         'HOST':'IP地址',#     }# }还要安装数据路的驱动pip install mysql-python放在 解释器venv\Lib\site-packages下出来在环境下执行pip.exe install mysqlclient-1.3.13-cp37-cp37m-win_amd64.whlpython manage.py makemigrationspython manage.py migratecss js的文件配置在配置文件中加入路劲 STATICFILES_DIRS=[     os.path.join(BASE_DIR,'static')#static是文件夹放css/js等]-----------------------------------------------------------------------------------------------------------数据库的增删该查:查询数据库数据:查询单条的数据是 变量= testweb.objects.get(pk=aihao_id)               变量= testweb.objects.filter(name='张三',age='18')# 这个像是select里面的and查询多条的数据是 list = testweb.objects.all()               for i in list:               变量=list.name   变量=list.age   等增数据 首先是实例化一个对象 message = testweb()                         message.name = '李四'                         message.age = '19'                         message.save()删除数据 在查询数据以后跟delete() 如:               变量= testweb.objects.get(pk=aihao_id)               变量.delete()               list = testweb.objects.all()               for i in list:               变量=list.name.delete()----------------------------------------------------------------------------------------------------------------------HTML :placeholder='请输入'#这是输入框的提示信息value='{{message.name}}'#显示name  也能够用if  elsevalue="{% if message.name=='张三' %}'我是张山{% end if%}#若是name是张三 就显示我是张三value="{% if not message.name=='张三' %}'我不是张山{% end if%}#若是name不是张三 就显示我不是张三value="{% ifequal message.name '张三' %}'我是张山{% end ifequal %}#若是name是张三 就显示我是张三value="{% ifequal message.name | slice:'2' '张三' %}'我是张山{% end ifequal %}#若是前两个name是张三 就显示我是张三--------------------------------------------------------------------------------------------------------------------------坑:安装的mysql8.x数据迁移的时候遇到django.db.utils.OperationalError: (2059, <NULL>)是应为MySQL8.x采用了新的加密方式,但Django2.x并不识别此种加密,致使没法链接到数据库解决方式是cmdmysql -u root -pUSE mysql;# 修改加密方式ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';# 刷新数据库FLUSH PRIVILEGES;在尝试数据迁移就成功了。------------------------------------------------------------------------------------------------------------HTML中的下拉框选择的数据咱们经常要作后台验证,取值方式是 <select name="ds">    <option  value="是">是</option>    <option  value="否">否</option> </select>在views中取的是value的值ds = request.POST['ds']print(ds)
相关文章
相关标签/搜索