django在iis上的应用报400与404错误!

将django程序迁移到新的iis上,折腾了一周,毫无头绪。悬赏求解!
一、我的设置:
1)在新机器上安装anaconda,用canda命令建立虚拟环境。在虚拟环境中安装与旧机器同样的包。(包括python与django的版本一致)如下图:

img


2)在虚拟环境中wfastcgi-enabel启用wfastcig,记录了参数
3)在IIS中新建web网站,如下图

img

4)在新建的网站中添加了模块映射。如下图

img

5)在wfastcgi中添加了环境参数。如下图:

img


6)我的setting文件:

DEBUG =True
ALLOWED_HOSTS = ['*']
STATIC_URL = '/assets/'
STATIC_ROOT = os.path.join(BASE_DIR, 'templates/assets')

7)我的urls设置:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index,{'stock':'g_view'},name='g_view'),
    path('ajax_rio/', views.ajax_rio,name='ajax_rio'),
    path('ajax_stock_mv/', views.ajax_stock_mv,name='ajax_stock_mv'),
    path('ajax_stock_R_D_bend/', views.ajax_stock_R_D_bend,name='ajax_stock_R_D_bend'),
    path('ajax_stock_risk/', views.ajax_stock_risk,name='ajax_stock_risk'),
    path('/', views.index,name='index'),
    url(r'^assets/(?P.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='assets'),
]

8)将iis网站的身份验证改为adimistrator(加密码),所有相关目录的访问权限设置为everyone完全控制。
二、故障描述
1)404错误

img


2)iis中更改网站端口,变成了400错误

img

三、请教
我的新网站文件与旧网站一摸一样,模块一样,iis设置一摸一样,旧网站django与iis的web都正常,新网站django的web正常,iis报错。
隐约中感觉是wfastcgi没有正常工作,但又没有依据。不知怎样排查,请给思路并指正!

问题在无意中解决。本来是做最后一次尝试,不行就用apache了。过程如下:
1)配置了一个静态网页文件,发现也是一样的404报错,突然感觉应当是iis设置的问题了,但又找不到原因,卸载iis后重新安装。
2)静态网页可以正常访问了,配置wfastcgi,出现报错:

PermissionError at /
[Errno 13] Permission denied: 'C:\\Windows\\system32\\config\\systemprofile\\tk.csv'
Request Method:    GET
Request URL:    http://192.168.192.8:8080/
Django Version:    3.2.4
Exception Type:    PermissionError
Exception Value:    
[Errno 13] Permission denied: 'C:\\Windows\\system32\\config\\systemprofile\\tk.csv'
Exception Location:    C:\Anaconda3\envs\MyDSS\lib\site-packages\pandas\io\common.py, line 428, in get_handle
Python Executable:    C:\Anaconda3\envs\MyDSS\python.exe
Python Version:    3.8.15
Python Path:    
['.',
 'D:\\mypython\\djangoweb\\MyDSS',
 'C:\\Anaconda3\\envs\\MyDSS\\python38.zip',
 'C:\\Anaconda3\\envs\\MyDSS\\DLLs',
 'C:\\Anaconda3\\envs\\MyDSS\\lib',
 'C:\\Anaconda3\\envs\\MyDSS',
 'C:\\Anaconda3\\envs\\MyDSS\\lib\\site-packages']
Server time:    Mon, 06 Feb 2023 12:43:19 +0000

[Errno 13] Permission denied: 'C:\Windows\system32\config\systemprofile\tk.csv'这句很奇葩,tk.csv是什么鬼?
将ervryone完全控制权限赋予C:\Windows\system32\config\systemprofile,一切正常了。
没有一丝欣喜,反而是无穷无尽的失落。
耗费我这么长时间,这个报错百度了没有任何结果。tk.csv是什么?难道一个网站要把所有的权限赋予所有重要目录才能用?
毫无头绪,毫无意义,毫无逻辑。iis(windows)的坑真大啊!
请指教!这个问题弄清楚就结帖!谢谢!

HTTP 404 错误是表示服务器找不到请求的资源的常见错误。在 IIS 中,这通常是因为找不到请求的 URL。

解决此问题的一些常见步骤如下:

检查 URL:请确保请求的 URL 正确无误,并尝试从浏览器中直接访问该 URL。

检查虚拟目录:如果请求的是网站的虚拟目录,请确保它已配置并正确映射到磁盘上的目录。

检查文件:请确保请求的文件存在,并检查是否已给予了正确的读取权限。

检查 URL 重写:如果使用了 URL 重写,请确保重写规则正确。

检查扩展名映射:请确保 IIS 已正确映射所请求文件的扩展名。

如果仍然无法解决问题,请检查 IIS 日志以获取更多详细信息。

常见的原因包括:

1、IIS未配置正确:如果IIS未正确配置,可能会导致400错误,例如未正确配置FastCGI或WSGI组件。

2、URL路径错误:如果Django的URL规则未正确配置,可能会导致404错误。

3、Django未安装或配置正确:如果Django未正确安装或配置,可能会导致400或404错误。

4、防火墙规则限制:如果防火墙规则限制了IIS或Django的访问,可能会导致400或404错误。

建议检查IIS和Django的配置,以确定具体的原因。

将项目文件的iis用户权限提升

URL重写问题:Django需要通过重写规则处理URL,请检查IIS的URL重写规则是否正确。

FastCGI配置问题:Django需要通过FastCGI协议运行,请检查FastCGI配置是否正确。

环境变量问题:Django需要访问一些环境变量来运行,请检查是否设置了必要的环境变量。

权限问题:IIS需要拥有读取Django项目文件的权限,请检查IIS是否具有该权限。

如果以上解决方案都无效,可以尝试重新配置IIS或Django以解决问题

要自定义处理url请求错误需要进行三步操作:
主要错误有:
404错误:page not found视图
500错误:server error视图
400错误:bad request视图

以404错误为例,500、404同理
我这里创建了一个应用,名为booktest

Step1:修改settings.py
DEBUG = True —-改为—-> DEBUG = False
ALLOWED_HOSTS = [] —-改为—-> ALLOWED_HOSTS = [‘*’, ]
注:未更改将显示调试视图,而不是错误视图
Step2:创建模板文件
在templates目录下的booktest下创建404.html:
Step3:修改views.py文件
添加函数 page_not_found()
Step4:修改项目下的urls.py(框架自带的)
注:不是应用下的urls.py,即这里不是:booktest/urls.py