当前位置: 首页 > 网络应用技术

如何写djangowsgi.py?

时间:2023-03-06 15:16:22 网络应用技术

  简介:许多朋友问有关如何写djangowsgi.py的问题。本文的首席CTO笔记将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!

  本文演示了如何使用1.7的Django版本创建一个简单的Django网站。

  1.创建项目

  运行以下命令来创建Django项目。项目名称是MySite:

  $ django- addmin.py startproject mysite

  创建的项目目录如下:

  我的网站

  e- manage.py

  t - 锰矿

  t- __init__.py

  在──设置.py

  s-或urls.py

  。─— wsgi.py

  1个目录,5个文件

  阐明:

  __init__.py:让Python将目录作为开发包所需的文件(即一组模块)。这是一个空文件,通常您不需要修改它。

  Manage.py:命令行工具允许您通过多种方式与Django项目进行交互。类型python manage.py帮助查看它可以做什么。您不需要编辑此文件;在此目录中为方便起见是纯粹的。

  settings.py:Django项目的设置或配置。

  urls.py:项目的URL路由设置。目前,它是空的。

  wsgi.py:wsgi Web应用程序服务器配置文件。有关更多详细信息,请检查如何使用WSGI部署

  接下来,您可以修改settings.py文件,例如:修改Lagansy_code,设置时区time_zone

  来自django.core.urlresolvers import reververs_lazy

  来自django.shortcuts导入重定向,get_object_or_404

  来自django.forms.models导入modelform_factory

  来自django.apps导入应用程序

  从django.views.gneric.base导入templateresmixin,查看,查看

  来自django.views.gneric.list导入listView

  来自django.views.gneric.edit import createview,updateView,deleteview

  从括号中。视图导入登录MIXIN,许可Mixin

  从牙套中。

  从。模型导入课程,模块,内容

  来自.forms导入模块Formset

  从django.db.models进口计数

  来自.models导入主题

  来自django.views.gneric.detail导入详细信息

  来自学生。Forms导入课程enrollolform

  #在这里创建您的观点。

  class ownermixin(对象):

  def get_queryset(self):

  qs = super(superermixin,self).get_queryset()

  返回QS.Filter(所有者= seld.request.user)

  class eslowNitMixin(对象):

  def form_valid(self,form):

  form.instance.owner = self.request.user

  返回super(outereditmixin,self).form_valid(form)

  class ownerCoursemixin(ownermixin,loginrequiredmixin):

  模型=课程

  fields = ['主题','title','slug','概述']

  success_url = reverse_lazy('manage_course_list')

  class ownercourseeditminxin(ownererCoursemixin,eslowitMixin):

  fields = ['主题','title','slug','概述']

  success_url = reverse_lazy('manage_course_list')

  template_name ='courses/manage/course/form.html'

  类ManageCourSelistView(OholderCoursemixin,ListView):

  template_name ='courses/manage/course/list.html'

  班级CourseCreateaTeview(许可证

  ownercourseeditminxin,

  CreateView:

  许可证='courses.add_course'

  课程UpdateView(许可证

  ownercourseeditminxin,

  UpdateView:

  cermission_required ='courses.change_course'

  COURSELETEVIEW班级(许可证

  ownercoursemixin,

  Deleteview:

  template_name ='courses/manage/course/delete.html'

  success_url = reverse_lazy('manage_course_list')

  cermission_required ='courses.delete_course'

  coursemoduleupdateview(templateresponsemixin,查看):

  template_name ='courses/manage/module/formset.html'

  课程=无

  def get_formset(seld,data = none):

  返回moduleformset(instance = self.course,

  数据=数据)

  DEF调度(自我,请求,PK):

  self.course = get_object_or_404(课程,id = pk,所有者= request.user)

  返回超级(coursemoduleupdateview,self).dispatch(请求,PK)

  def获取(自我,请求,*args,** kwargs):

  formSet = self.get_formset()

  返回selder_to_response({'course':self.course,

  'FormSet':FormSet})

  def post(self,request,*args,** kwargs):

  formSet = self.get_formset(data = request.post)

  如果formset.is_valid():

  formSet.save()

  返回redirect('manage_course_list')

  返回selder_to_response({'course':self.course,

  'FormSet':FormSet})

  类ContentCreateupDateView(Templateresponsemixin,查看):

  模块=无

  模型=无

  obj =无

  template_name ='courses/manage/content/form.html'

  def get_model(self,model_name):

  如果在['text',''视频','image','file'中中的model_name]:

  返回apps.get_model(app_label ='courses',

  model_name = model_name)

  没有返回

  def get_form(self,model,*args,** kwargs):

  form = modelm_factory(model,dubl = ['所有者',,

  '命令',

  “创建”,

  '更新'])

  返回表格(*args,** kwargs)

  def dispatch(self,request,module_id,model_name,id = none):

  self.module = get_object_or_404(模块,

  id = module_id,

  cousse __owner = request.user)

  self.model = self.get_model(model_name)

  如果ID:

  self.obj = get_object_or_404(self.model,id = id = id,所有者= request.user)

  返回super(contentCreateupDateView,self).dispatch(请求,module_id,model_name,id)

  def get(self,request,module_id,model_name,id = none):

  form = self.get_form(self.model,instance = self.obj)

  返回self.render_to_response({'form':form,'object':self.obj})

  def post(self,request,module_id,model_name,id = none):

  form = self.get_form(self.model,

  实例= self.obj,

  data = request.post,

  文件= request.files)

  如果form.is_valid():

  obj = form.save(commit = false)

  obj.owner = request.user

  obj.save()

  打印ID,''

  如果不是ID:

  打印 '******************

  content.objects.create(模块= seld.module,

  项目= OBJ)

  打印 '******************

  返回redirect('module_content_list',self.module.id)

  返回self.render_to_response({'form':form,'object':self.obj})

  类ContentDeleteview(视图):

  DEF帖子(自我,请求,ID):

  content = get_object_or_404(内容,内容,

  id = id,

  模块__course__owner = request.user)

  模块= content.module

  content.item.delete()

  content.delete()

  返回redirect('module_content_list',module.id)

  类ModulecontentListView(Templateresponsemixin,查看):

  template_name ='courses/manage/module/content_list.html'

  def get(self,request,module_id):

  模块= get_object_or_404(模块,

  id = module_id,

  cousse __owner = request.user)

  返回selder_to_response({'module':module})

  类ModuleDorderView(CSRFEXEMPTMIXIN,

  jsonrequestresponsemixin,

  看法:

  def post(自我,请求):

  对于ID,请在self.request_json.items()中订购:

  module.objects.filter(id = id,

  course__owner = request.user).update(订单=订单)

  返回self.render_json_response({'saved':'ok'})

  类ContentOrderView(CSRFExemptMixin,

  jsonrequestresponsemixin,

  看法:

  def post(自我,请求):

  对于ID,请在self.request_json.items()中订购:

  content.objects.filter(id = id,

  模块__course__owner = request.user)

  .update(订单=订单)

  返回self.render_json_response({'saved':'ok'})

  COURSSELISTVIEW(Templateresponsemixin,查看):

  模型=课程

  template_name ='courses/course/list.html'

  def get(seld,请求,主题=无):

  主题= object.objects.annotate

  total_courtes = count('课程')

  治愈

  课程= course.objects.annotate(

  total_modules = count('模块')

  治愈

  如果主题:

  主题= get_object_or_404(主题,slug =主题)

  课程=课程.filter(主题=主题)

  打印“ ************”,主题,课程,主题

  返回self.render_to_response({'subjets':主题,

  “主题”:主题,

  “课程”:课程})

  coper coursedetailview(详细信息):

  模型=课程

  template_name ='课程/课程/详细信息html'

  def get_context_data(self,** kwargs):

  context = super(coursedetailview,

  self).get_context_data(** kwargs)

  context ['enroll_form'] = courseenrollform(

  初始= {'course':self.Object})

  返回上下文

  安装软件

  安装Python 2.7,Pycharm,PIP(Python软件包管理工具),Django(pip install django)

  部署

  Pycharm新Django项目

  完成后,目录如下:

  sub -directory medjangoproject指示该项目的全局配置,即setttings.py,urls.py和wsgi.py.其中,setttings.py包括系统数据库配置,应用程序配置和其他配置,以及urls.py是

  指示Web工程URL映射的配置。

  子目录学生是在项目下创建的一个应用程序,包括models.py,tests.py,views.py和其他文件

  模板目录是模板文件的目录

  Manage.py是Django提供的管理工具。

  启动

  创建完成后,可以正常启动。单击运行按钮以开始时机错误:

  Trackback(最近的最新电话):

  文件“ d:/workspace/mydjangoproject/manage.py”,第10行,在模块中

  execute_from_command_line(sys.argv)

  文件“ d:python27libsite-packagesdjangocooranagements__init__。py”,第338行,在execute_from_commman_line中

  utility.execute()

  文件“ d:python27libsite-packagesdjangocoranagements __init __. py”,第312行,在执行中

  django.setup()

  文件“ d:python27libsite-packagesdjango__init __. py”,第18行,在设置中

  apps.populate(settings.installed_apps)

  文件“ d:python27libsite-packagesdjangoapps egistry.py”,第89行,人口

  “重复:%s”%app_config.label)

  django.core.exceptions.improperlyconfigured:应用程序标签不是唯一的,重复:admin

  它应该是配置冲突,打开settings.py文件,并发现重复管理员配置

  instasted_apps =((

  'django.contrib.admin',

  'django.contrib.auth',

  'django.contrib.contenttypes',

  'django.contrib.sessions',

  'django.contrib.messages',

  'django.contrib.staticfiles',

  'django.contrib.admin',

  '学生',

  治愈

  评论丢失后(为什么有这个问题,估计它是一个错误),重新启动,确定

  Web项目添加页面

  目前,我们尚未编写一行代码,并且程序正在运行!添加一个Hello World页面。

  打开学生/views.py文件,输入以下内容

  def sayhello(请求):

  S ='Hello World!'

  current_time = dateTime.dateTime.now()

  html ='htmlhead/headbody1%s/h1p%s/p/p/p/html'%(s,current_time)

  返回httpresponse(HTML)

  打开url.py文件,您需要配置URL映射:

  url(r'^student/',sayhello)

  当用户输入http:// **/站立时,调用了Sayhello方法。此方法通过httpresponse()返回页面内容作为响应。

  重新启动服务,访问

  在views.py页面上,该页面所需的元素需要调用httpresponse()类作为对浏览器的响应。相对较大。如果我们需要显示一些动态数据并且页面基本不更改,该怎么办?

  例如,当用户面试时,我们想动态显示一些学生的数据。您可以做到这一点:

  首先,在模板目录中,创建一个新的sut剂节.html文件。该文件用作模板。内容如下:

  呢Doctype HTML

  html

  头

  标题/标题

  /头

  身体

  Ul

  {学生中的学生%}

  李

  id:{student.id}},名称:{{student.name}},年龄:{{student.age}}

  /li

  {%endfor%}

  /ul

  /身体

  /html

  修改views.py文件,添加方法showstuders()

  Def ShowStudents(请求):

  list = [{id:1,'name':'jack'},{id:2,'name':'rose'}]

  返回render_to_response('Student.html',{'sustemans':list})

  该方法将列表用作动态数据,并将其绑定在render_to_response方法上与模板页面sutper.html。

  添加URL映射,URL(R'^ShowStudents/$',ShowStudents)

  修改设置.py模板配置:'dirs':[base_dir+r'emplates'],

  重新启动服务,访问,出现:

  在这一点上,我们通常可以将一些“动态”数据绑定到模板。但是如何访问数据库?

  从数据库中获取所需的数据,在页面上显示它?

  首先,您需要安装数据库驱动程序,即mysql_python,

  然后配置数据库连接:

  数据库= {

  '默认': {

  '引擎':'django.db.backends.mysql',

  “名字”:“学生”,

  “用户”:“根”,

  '密码':'1234',

  “主机”:'127.0.0.1',

  '端口':'3306',

  #'name':os.path.join(base_dir,'db.sqlite3'),

  }

  }

  配置完成后,您需要检测数据库配置是否正确。使用Manage.py Shell命令输入Shell Interactive接口:

  进入:

  来自django.db导入连接

  光标= Connection.Cursor()

  如果您不报告错误,则配置是正确的。

  创建一个模型,打开Models.py,然后定义模型如下:

  班级学生(型号。模型)

  id = models.bigintegerfield

  name = models.charfield(max_length = 20,默认值='a')

  然后致电manage.py syncdb

  在正常情况下,完成此步骤后,模型将与数据库一致。但是,在测试中,在成功执行命令后,发现未建立数据库。

  对于这种情况,请执行以下操作是正常的:

  (1)评论型号。文件代码,执行管理。

  [并管理。

  (2)打开注释并执行[manage.py makemurations Student and] manage.py迁移命令

  通过以上两个步骤,可以正常操作

  如何添加views.py:showrealstudents

  DEF SHOWREALSTUDENTS(请求):

  list = student.objects.all()

  返回render_to_response('Student.html',{'sustemans':list})

  urls.py添加映射URL(r'^showrealstudents/$',showrealstudents)

  重新启动服务并打开连接:

  页面输出是正常的。

  此时,使用Django可以正常操作数据库,自定义模板并在页面上显示数据。

  服务器

  由于Django配备了轻型服务器,因此默认使用服务器,但在实际生产中不允许这样做。在生产环境中,Apache HTTPD服务器与MOD_WSGI.SO相结合,作为后端服务器。

  以下部署环境是:Python2.7.6

  1.安装HTTPD-2.2.25-WIN32-X86-NO_SSL.MSI

  2.将下载的mod_wsgi.so放置在D:Program filesapache软件Foundationapache2.2Modules模块。

  3.在新建的Web项目中

  内容如下(需要修改相应的目录):

  导入操作系统

  导入系统

  djangopath =“ d:/python27/lib/site-ackages/django/bin”

  如果djangopath不在sys.path中:

  sys.path.append(djangopath)

  ProjectPath ='d:/workspace/mydjangoproject'

  如果项目路径不在sys.path中:

  sys.path.append(Project Path)

  apppath ='d:/workspace/mydjangoproject/mydjangoproject'

  如果AppPath不在sys.path中:

  sys.path.append(apppath)

  os.environ ['django_settings_module'] ='mydjangoproject.settings''

  来自django.core.wsgi import_wsgi_application

  应用程序= get_wsgi_application()

  4.修改httpd.conf,添加如下:

  loadModule wsgi_module模块/mod_wsgi.so

  wsgiscriptalias/“ d:/workspace/mydjangoproject/django.wsgi”

  目录“ d:/workspace/mydjangoproject/“”

  选项跟随Symlinks

  Allowoverride无

  命令拒绝,允许

  从所有人那里允许

  /目录

  好的,重新启动服务器,页面是正常的。

  在部署过程中,遇到一个例外,如下:

  在应用程序注册表准备之前,在应用程序注册表之前初始化翻译插管

  原因是django.wsgi从旧写作开始,可以写入新版本。

  句子:安装必要的工具1.部署Python头发环境的PIP安装,以简化某些软件安装程序(PIP响应lualuarocks)Sudo apt-get安装安装python-pip安装三个python框架sudo pip sudo sudo sudo sudo sudo安装django ==一个。5。一个sudo pip安装龙卷风== 3.3。一二。安装运行Pythonwsgi HTTP服务SUDO PIP安装gunicorn 3. Virtualenv,安装和部署Sudo Pip intern virtualenv:create exployment application.debug“:true,true,” static_path“:”### urls = [(r“/”,mainhandler),] app = tornado.wsgiapplication(urls,**设置):gunicorn -w torapp:app -b 0.0.0.0:让我们两个。flask app = flask(__ name __) @app.route(“/”)def hello():返回“我的源代码codlein the Mopaas Server the Mopaas Server by Python Tornado!“如果__name __ ==” __ -main __”:app.run()创建项目django-admin.py startprojec','gunicorn')的复杂环境对创建虚拟环境没有问题。应用比Saemopaas和Sae更好。

  当使用django命令生成项目的基本结构时,配置信息将保留在settings.py文件中,以与项目目录同名目录的目录中。在实际开发中,对于一个项目,这通常是不合适的。将设置配置文件授予几个文件。将在线使用的文件放在base.py文件中,在product.py文件上的在线文件,开发测试文件放在devert.py fileessencethis函数部门中很明确,这对于我们的在线和离线调试非常方便。

  1)在同名项目中,创建一个设置包(目录中包含__init__.py的文件夹)。

  2)在设置软件包中创建3个新文件:public base base.py(用于配置Django默认配置文件),develop.py(用于开发环境)和product.py(用于生产环境)。

  3)将原始设置的内容复制到base.py文件。

  4)确认目录确定后,我们需要在base.py中修改时区和语言配置:

  如果需要修改类似的公共零件,则可以在base.py(例如注册表应用程序)中修改它,这里没有示例。

  5)之后,对于不同的在线和离线零件,我们只能导入base.py模块并将其修改为不同零件。例如,在线和离线对接不同的测试数据库,我们可以修改数据库连接:

  6)修改Manage.py文件。使用自己的服务开始时,Django需要知道设置文件的路径。

  7)生产时,请使用asgi.py(在django3.x中)或wsgi.py(django2.x版本),您可以更改生产配置文件的路径:

  上述问题也有问题。如果在线和离线环境切换,我们需要更改代码,我们可以通过设置系统环境变量来动态获取它,以避免修改代码:

  这样,Django通过在系统环境变量中读取Lipin_profile来加载不同的设置文件。

  这可以删除原始设置.py文件!交叉

  但是会有一个问题。您会发现我们无法访问以前的好网页,也找不到模板!

  这是因为在先前的配置文件中,路径问题,因为我们的原始配置文件以同一名称为单位,现在我们被分为一个新软件包,因此我们需要转到第一级目录是我们需要的

  结论:以上是首席CTO的所有内容都注明了Djangowsgi.py如何为所有人写的。感谢您阅读ContentForgot在此网站上找到它。