https://www.runoob.com/django/django-first-app.html
1,首先安装pip install django 设置环境变量等,OK就可以建站了
1,1 DJANGO-ADMIN startproject mysite这就建立了目录,目录里面有MANAGER.PY这是用来管理站点的
1,1,1建立 了MYSITE目录,里面有MANAGER.PY 有MYSITE 目录
建立的目录是mysite
-mysite
-init
setting;url;wsgi 最外层有一个MANAGE.PY
1,2 PYTHON MANAGE.PY runserver 127.0.0.1:8001 这样就可以把站点运行起来 默认8000端口
2,用PYCHARM打开站点,打开django程序
3,路由文件urls.py,里面urlpatterns,列表里面加一个URL,加上一个函数名字,不用加(), 函数需要需要引用HTTPRESPONSE ,from django.shortcuts import HttpResponse; def index(request): return HttpResponse("ok")
4,创建APP就是创建一个业务,比如 一个主站,一个后台管理系统,创建方法只能是命令行(windows,MAC可以),python manage.py startapp xxxx, 一般情况下 我们的函数代码不应该直接写入URLS里面,而是应该放到对应的APP目录里面的VIEWS。然后引入包,在改一下路径views.home就可以了
4,1MIGRATIONS 里面记录表结构所发生的变化(数据库)数据库操作记录。修改表结构的记录(就是)
4,2 _INIT__文件在python2.0必须要有 但是3.0 就可有可无了。 因为 只有 有__init.py__ 有这个标识就会认为是包(2.0)
4,3 ADMIN.PY DJANGO为我们提供的后台管理模块 可以自动
4,4 APPS 配置当前APP的
4,5 MODELS 创建表的修改表用的 ORM写指定的类,通过命令创建数据库结构
4,6 TESTS 单元测试
4,7 VIEWS 业务代码(真正写代码的地方)
4,8 关于TEMPLATES如果用了RENDER 这个时候会自动从TEMPLATES里面找文件读取,可是 有部分会出现没有发现TEMPLATES问题 ,在网上找到的原因是没有配置SETTING文件 解决方案是吧DIRS 列表增加字段(3,7 DJANGO忘了什么版本的)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
4,9 关于静态文件比如一个CSS文件、JS文件引用的方法,并不能常常规引用,因为我们的路由文件URLS里没有配置,但是也不能有几个就写几个列表元素进去,正确的做法是把他放到一个目录里面,在SETTINGS里面配置,比如把文件放到了/STATIC/里面
STATIC_URL='/static/' STATICFILES_DIRS=( OS.PATH.JOIN(BASE_DIR,"static'), #这个逗号记得写上 )
4,10 总结,创建完成站点后一般我们先配置1模板路径,2静态目录.
4,11 关于提交页面,ACTIONS里面,如果写的是原网页地址这个提交后会返回错误(跨站访问失败,好像就是这么叫),处理的方法是,找到SETTINGS配置注释掉MIDDLEWARE 列表里面的DJANGO.MIDDLEWARE.CSRF.cSRFvIEWmIDDLEWARE
4,12 request里面包含了用户发过来的请求,因为POST提交之后是以字典方式提交所以 我们的INPUT 标签里的内容 要加上NAME属性 要不 你没有NAME:VALUES结构
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
if request.method=='POST': user=request.POST("user") password=request.POST("password") print(user,password) return render.(request,"login.html") #但是这种方式会出现问题,因为POST提交过来一个字典就会出现字典长错的地方,没有找到的话,程序就报错了,所以应该改一下用GET的方式找字典的VALUE 找到了就是有,没有找到就是None if request.method=='POST': user=request.POST.get("user",None) password=request.POST.get("password",None) print(user,password) return render.(request,"login.html") ###如果要让用户跳转网页的话需要引入新方法import django.shortcuts import redirect if request.method=="POST": user=request.POST.get("username",None) password=request.POST.get("password",None) if user=='root' and password=='123': return redirect("http://www.baidu.com") #其实return render(request,"login.html")后面还可以再加一个参数其实就是字典的KEY 比如return render(request,"login.html",{"error_msg":error_msg}) 然后在templates的Login.html里面的{{error_msg}} 就会被替换成KEY的VALUE
如果LOGIN里面的ACTION里面内容是/LOGIN 那么URLS里面也不要加/ 就是LOGIN.HTML也不要加 DJANGO会自动加/ 保持一致 要不然会报错 找不到文件
4,13 在HTML里面拿python程序里面的数据,PYTHON的语法会稍微改变
<table> {% for row in user_list %} <tr> <td>{{row.username}} </td> </tr>
{% endfor %} </table>
4,14 路由系统(urls),视图函数(VIEWS),